Warum verursacht das Prozentzeichen in einer URL einen HTTP 400 Bad Request-Fehler?

22

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.

iglvzx
quelle

Antworten:

32

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 4xxKlasse:

4xx: Client Error - The request contains bad syntax or cannot be fulfilled

Quelle: HTTP-Statuscode-Registrierung (Hypertext Transfer Protocol)

Insbesondere wird Code 400von der Internet Engineering Task Force (IETF) in RFC 2616 definiert:

10.4.1 400 Bad Request

Die Anforderung konnte vom Server aufgrund einer fehlerhaften Syntax nicht verstanden werden. Der Kunde sollte die Anfrage NICHT ohne Änderungen wiederholen.

Quelle: RFC 2616 - Hypertext Transfer Protocol - HTTP / 1.1

Wikipedia zitieren (Fettdruck von mir):

Die Zeichen in einer URI erlaubt sind entweder reserviert oder vorbehaltlos ( oder ein Prozentzeichen als Teil eines URL-Encoding ).

Quelle: Prozentcodierung - Prozentcodierung in einem URI

Wenn Sie eine wörtliche einfügen möchten %Symbol, müssen Sie die Prozent-codierte Darstellung verwenden: %25.

Weitere Lektüre

und31415
quelle
Ich verstehe es nicht. Wenn ich das ‚%‘ Zeichen Maske mit ‚% 25‘ wird die Datei noch nicht bedient werden , aber ein Fehler 400 wird in unserem Szenario geworfen werden (Apache -> JkMount -> Tomcat)
Fiffy
Wenn Sie die folgende RewriteRule RewriteRule (.*) xyz/$1(wobei xyz ein beliebiger Ordnername ist) in .htaccess haben, sollten Sie -encode% als% 2525 verdoppeln .
Marco Marsala
9

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.

LPChip
quelle
4
Und um ein Prozentzeichen selbst einzufügen, ist es%25
Robotnik
A +ist eine Abkürzung, um ein Leerzeichen zu kodieren. Wenn Sie ein echtes Pluszeichen wünschen, verwenden Sie den Hex-Code% 2B.
Phil Perry
3
+ ist die richtige Kodierung für ein Leerzeichen nur innerhalb einer Abfragezeichenfolge. % 20 ist die korrekte Kodierung an anderer Stelle in der URL.
Eden Townsend