Natknąłem się na to przypadkowo, gdy błędnie wpisałem adres URL strony internetowej w przeglądarce.
Dlaczego odwiedziny http://example.com/%
powodują zgłoszenie błędu nieprawidłowego żądania HTTP 400? Czy serwer oczekuje czegoś innego po znaku procentu lub przed nim?
Wydaje się, że dzieje się tak w przypadku serwerów Apache i Nginx.
(Serwer: cloudflare-nginx) /superuser//%
(Serwer: Apache) http://mozilla.org/%
apache-http-server
webserver
http
nginx
iglvzx
źródło
źródło
Odpowiedzi:
Krótka odpowiedź
Zgodnie z RFC 3986 , pusty
%
znak nie jest prawidłową składnią URI ; po nim powinny następować dwie znaczące cyfry szesnastkowe .Długa odpowiedź
Otrzymany kod statusu HTTP należy do
4xx
klasy:W szczególności kod
400
jest zdefiniowany przez Internet Engineering Task Force (IETF) w RFC 2616:Cytując Wikipedię (moje odważne podkreślenie):
Jeśli chcesz wstawić literalnego
%
symbolu, należy użyć jego procentowy zakodowanych reprezentacji:%25
.Dalsza lektura
źródło
RewriteRule (.*) xyz/$1
(gdzie xyz to dowolna nazwa folderu) w .htaccess, powinieneś dwukrotnie kodować% jako% 2525.Znak procentu służy do wstawienia znaku, który zwykle nie jest obsługiwany w adresie URL. Na przykład% 20 jest taki sam jak spacja.
źródło
%25
+
to skrót do kodowania spacji. Jeśli chcesz prawdziwy znak plus, użyj jego kodu szesnastkowego,% 2B.