Ich habe eine Site, die "/" und "% 2F" im Pfadabschnitt (nicht in der Abfragezeichenfolge) einer URL unterschiedlich behandelt. Ist das eine schlechte Sache, entweder nach RFC oder nach der realen Welt?
Ich frage, weil ich immer wieder auf kleine Überraschungen mit dem von mir verwendeten Webframework (Ruby on Rails) und den darunter liegenden Ebenen stoße (Passenger, Apache, z. B. musste ich "ALLOW_ENCODED_SLASHES" für Apache aktivieren). Ich neige jetzt dazu, die codierten Schrägstriche vollständig zu entfernen, aber ich frage mich, ob ich Fehlerberichte einreichen sollte, bei denen ich ein seltsames Verhalten bei den codierten Schrägstrichen sehe.
Grundsätzlich habe ich Routen wie diese, warum ich die codierten Schrägstriche überhaupt habe:
:controller/:foo/:bar
Dabei gilt: foo ist so etwas wie ein Pfad, der Schrägstriche enthalten kann. Ich dachte, das Einfachste wäre, nur die URL zu maskieren, foodamit die Schrägstriche vom Routing-Mechanismus ignoriert werden. Jetzt habe ich Zweifel und es ist ziemlich klar, dass die Frameworks dies nicht wirklich unterstützen, aber laut RFC ist es falsch, dies so zu tun?
Hier sind einige Informationen, die ich gesammelt habe:
RFC 1738 (URLs):
Normalerweise hat eine URL dieselbe Interpretation, wenn ein Oktett durch ein Zeichen dargestellt wird und wenn es codiert ist. Dies gilt jedoch nicht für reservierte Zeichen: Das Codieren eines für ein bestimmtes Schema reservierten Zeichens kann die Semantik einer URL ändern.
RFC 2396 (URIs):
Diese Zeichen werden als "reserviert" bezeichnet, da ihre Verwendung innerhalb der URI-Komponente auf ihren reservierten Zweck beschränkt ist. Wenn die Daten für eine URI-Komponente mit dem reservierten Zweck in Konflikt stehen würden, müssen die widersprüchlichen Daten vor dem Bilden des URI maskiert werden.
(Bedeutet Flucht hier etwas anderes als das Codieren des reservierten Zeichens?)
RFC 2616 (HTTP / 1.1):
Andere Zeichen als die in den "reservierten" und "unsicheren" Sätzen (siehe RFC 2396 [42]) entsprechen ihrer ""% "HEX HEX" -Codierung.
Es gibt auch diesen Fehlerbericht für Rails, in dem sie zu erwarten scheinen, dass sich der codierte Schrägstrich anders verhält:
Richtig, ich würde unterschiedliche Ergebnisse erwarten, da sie auf unterschiedliche Ressourcen verweisen.
Es wird nach der Literaldatei 'foo / bar' im Stammverzeichnis gesucht. Die nicht maskierte Version sucht nach der Dateiliste im Verzeichnis foo.
Aus den RFCs geht hervor, dass Raw vs. Coded das Äquivalent für nicht reservierte Charaktere ist. Aber wie sieht die Geschichte für reservierte Charaktere aus?