Czy ukośnik („/”) odpowiada kodowanemu ukośnikowi („% 2F”) w części ścieżki adresu URL HTTP

Mam witrynę, która traktuje „/” i „% 2F” w części ścieżki (nie w ciągu zapytania) adresu URL inaczej. Czy to jest złe, zgodnie z RFC lub realnym światem?

Pytam, ponieważ ciągle mam małe niespodzianki w używanym przeze mnie systemie (Ruby on Rails), a także w warstwach poniżej (Passenger, Apache, np. Musiałem włączyć „ALLOW_ENCODED_SLASHES” dla Apache). Teraz skłaniam się ku całkowitemu pozbyciu się zakodowanych ukośników, ale zastanawiam się, czy nie powinienem zgłaszać błędów, w których widzę dziwne zachowanie dotyczące zakodowanych ukośników.

Jeśli chodzi o to, dlaczego mam zakodowane ukośniki w pierwszej kolejności, zasadniczo mam takie trasy jak:

:controller/:foo/:bar

gdzie: foo jest czymś w rodzaju ścieżki, która może zawierać ukośniki. Pomyślałem, że najprostszą rzeczą do zrobienia będzie po prostu ucieczka z adresu URLfoo więc ukośniki są ignorowane przez mechanizm routingu. Teraz mam wątpliwości i jest całkiem jasne, że frameworki tak naprawdę tego nie obsługują, ale według RFC jest źle robić to w ten sposób?

Oto kilka zebranych informacji:

RFC 1738 (adresy URL):

Zazwyczaj adres URL ma taką samą interpretację, gdy oktet jest reprezentowany przez znak i kodowany. Nie dotyczy to jednak znaków zastrzeżonych: kodowanie znaku zarezerwowanego dla określonego schematu może zmienić semantykę adresu URL.

RFC 2396 (URI):

Znaki te są nazywane „zarezerwowanymi”, ponieważ ich użycie w komponencie URI jest ograniczone do zarezerwowanego celu. Jeśli dane dla komponentu URI kolidowałyby z zarezerwowanym celem, to konfliktujące dane muszą być ucieczkowe przed utworzeniem URI.

(czy ucieczka tutaj oznacza coś innego niż kodowanie zastrzeżonego znaku?)

RFC 2616 (HTTP / 1.1):

Znaki inne niż w zestawach „zarezerwowanych” i „niebezpiecznych” (patrz RFC 2396 [42]) są równoważne kodowaniu „”% HEX HEX ”.

Jest równieżten raport o błędzie w przypadku Rails, gdzie wydaje się, że kodowany slash zachowuje się inaczej:

Racja, spodziewałbym się różnych wyników, ponieważ wskazują różne zasoby.

Szuka dosłownego pliku „foo / bar” w katalogu głównym. Wersja bez ucieczki szuka paska plików w katalogu foo.

Z RFC jasno wynika, że ​​surowe i kodowane jest odpowiednikiem niezarezerwowanych znaków, ale jaka jest historia zarezerwowanych znaków?

questionAnswers(5)

yourAnswerToTheQuestion