Ich bin versehentlich darauf gestoßen, als ich die URL für eine Webseite in meinem Webbrowser falsch eingegeben habe.
Warum wird beim Besuch http://example.com/%
ein HTTP 400 Bad Request-Fehler ausgelöst? Erwartet der Server nach oder vor dem Prozentzeichen etwas anderes?
Dies scheint für Apache- und Nginx-Server zu passieren.
(Server: cloudflare-nginx) /superuser//%
(Server: Apache) http://mozilla.org/%
apache-http-server
webserver
http
nginx
iglvzx
quelle
quelle
Antworten:
Kurze Antwort
Wie pro RFC 3986 , ein nacktes
%
ist Zeichen keine gültige URI - Syntax; Es sollten zwei aussagekräftige hexadezimale Ziffern folgen .Lange Antwort
Der HTTP- Statuscode, den Sie erhalten haben, gehört zur
4xx
Klasse:Insbesondere wird Code
400
von der Internet Engineering Task Force (IETF) in RFC 2616 definiert:Wikipedia zitieren (Fettdruck von mir):
Wenn Sie eine wörtliche einfügen möchten
%
Symbol, müssen Sie die Prozent-codierte Darstellung verwenden:%25
.Weitere Lektüre
quelle
RewriteRule (.*) xyz/$1
(wobei xyz ein beliebiger Ordnername ist) in .htaccess haben, sollten Sie -encode% als% 2525 verdoppeln .Das Prozentzeichen dient zum Einfügen eines Zeichens, das in der URL normalerweise nicht unterstützt wird. Zum Beispiel ist% 20 dasselbe wie ein Leerzeichen.
quelle
%25
+
ist eine Abkürzung, um ein Leerzeichen zu kodieren. Wenn Sie ein echtes Pluszeichen wünschen, verwenden Sie den Hex-Code% 2B.