Czy identyfikator URI (w szczególności adres URL HTTP) może zawierać jeden lub więcej znaków spacji? Jeśli adres URL musi być zakodowany, czy jest to +
tylko powszechnie przestrzegana konwencja, czy uzasadniona alternatywa?
W szczególności, czy ktoś może wskazać RFC, który wskazuje, że adres URL ze spacją musi być zakodowany?
Motywacja do pytania: podczas testowania wersji beta witryny internetowej zauważyłem, że niektóre adresy URL zostały utworzone ze spacjami. Wydawało się, że Firefox postępuje właściwie, co mnie zaskoczyło! Chciałem jednak móc wskazać programistom dokument RFC, aby poczuli potrzebę naprawienia tych adresów URL.
Odpowiedzi:
Zgodnie z RFC 1738 :
źródło
Dlaczego trzeba to zakodować? Żądanie wygląda następująco:
GET /url HTTP/1.1 (Ignoring headers)
Istnieją 3 pola oddzielone spacją. Jeśli umieścisz spację w swoim adresie URL:
GET /url end_url HTTP/1.1
Wiesz, że masz 4 pola, serwer HTTP powie ci, że to nieprawidłowe żądanie.
GET /url%20end_url HTTP/1.1
3 pola => ważne
Uwaga: w ciągu zapytania (po?) Spacja jest zwykle kodowana jako +
GET /url?var=foo+bar HTTP/1.1
zamiast
GET /url?var=foo%20bar HTTP/1.1
źródło
Krótsza odpowiedź: nie, musisz zakodować spację; to jest poprawne zakodować jako miejsca
+
, ale tylko w ciągu zapytania; na ścieżce, której musisz użyć%20
.źródło
Adresy URL są zdefiniowane w RFC 3986 , chociaż inne specyfikacje RFC są również istotne, ale RFC 1738 jest przestarzały.
Mogą nie mieć w sobie spacji, podobnie jak wiele innych znaków. Ponieważ te zabronione znaki często muszą być w jakiś sposób reprezentowane, istnieje schemat kodowania ich w adresie URL poprzez przetłumaczenie ich na ich szesnastkowy odpowiednik ASCII z prefiksem „%”.
Większość języków / platform programowania udostępnia funkcje do kodowania i dekodowania adresów URL, chociaż mogą one nie być zgodne ze standardami RFC. Na przykład wiem, że PHP nie.
źródło
Tak, jednak spacja jest zwykle zakodowana jako „% 20”. Wszelkie parametry przekazywane do adresu URL powinny być zakodowane, po prostu ze względów bezpieczeństwa.
źródło
Adres URL może zawierać spację i w większości przeglądarek będzie wyświetlany jako% 20, ale reguły kodowania przeglądarki zmieniają się dość często i nie możemy polegać na tym, jak przeglądarka wyświetli adres URL.
Zamiast tego możesz zastąpić znak spacji w adresie URL dowolnym znakiem, który Twoim zdaniem powinien uczynić adres URL bardziej czytelnym i „ładnym”;) ..... O, więc preferowane znaki ogólne to „-”, „_”, „+”… ale to nie są kompulsje, więc możesz użyć dowolnego znaku, którego nie ma już w adresie URL.
Unikaj%, &,}, {,], [, /,>, <jako zastępowania znaków spacji adresu URL, ponieważ mogą one spowodować błąd w niektórych przeglądarkach i platformach.
Jak widać, samo przepełnienie Staku używa znaku „-” jako zamiennika spacji (% 20).
Miłego przesłuchania.
źródło
Adresy URL nie powinny zawierać spacji. Jeśli chcesz zaadresować taki, który to robi, użyj jego zakodowanej wartości
%20
źródło
Identyfikatory URI, a tym samym adresy URL, są zdefiniowane w dokumencie RFC 3986.
Jeśli spojrzysz na zdefiniowaną tam gramatykę, w końcu zauważysz, że znak spacji nigdy nie może być częścią składniowo poprawnego adresu URL, więc termin „URL ze spacją” jest sam w sobie sprzecznością.
źródło
Odpowiedzieć na Twoje pytanie. Powiedziałbym, że dość często aplikacje zastępują spacje w wartościach, które będą używane w adresach URL. Powodem tego jest zwykle unikanie trudniejszego do odczytania kodowania procentowego (URI), które występuje.
Przeczytaj ten artykuł w Wikipedii o kodowaniu procentowym .
źródło
Firefox 3 wyświetli
%20
s w adresach URL jako spacje w pasku adresu.źródło
"Is a URL allowed to contain a space?"
. Raczej komentarz.