2009-03-28 8 views
3

Die HTTP-Spezifikation besagt, dass der Transfer-Encoding-Header für Anfragen erlaubt ist - aber welcher Fehlercode sollte ein Server antworten, wenn er das angegebene Transfer-Encoding nicht versteht.HTTP Transfer-Encoding und Anfragen

Soweit ich weiß, deckt der HTTP-Standard diese Möglichkeit nicht ab, aber vielleicht habe ich es gerade übersehen.

+0

+1 für die Bestätigung, dass HTTP REQUESTS auch 'Transfer-Encoding' unterstützen, was für ein PITA. – unixman83

Antwort

4

Eine unbekannte Übertragungscodierung sollte einen HTTP-Fehler 501 "NICHT IMPLEMENTIERT" auslösen. Das ist, was Apache zumindest tut.

Siehe auch http://argray.com/unixfaq/httpd_error_codes.shtml

Edit: Zeiger auf den entsprechenden RFC-Abschnitt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2

+0

die Beschreibung für 501 sagt: "Der Server unterstützt nicht die erforderliche Funktionalität zur Erfüllung der Anfrage. Dies ist die geeignete Antwort, wenn der Server die Anfrage-Methode nicht erkennt und nicht für jede Ressource unterstützen kann." Das scheint also keine gute Wahl zu sein. –

-1

Die RFC ist ein wenig unklar, aber IMHO sollte es 406 nicht akzeptabel sein.

+0

In meinem Verständnis der RFC, Code 406 sollte nur verwendet werden, wenn der Server nicht Inhalte liefern kann, die die "Accept" -Kopfzeile der Anfrage entspricht. Dies ist hier nicht der Fall. –

0

Eine Anfrage mit einem ungültigen Transfer-Encoding für die HTTP-Version ist fehlerhaft. Daher sollte der Server mit antworten.

+0

Das scheint die beste Wahl zu sein. –

3

Ich bin damit einverstanden, dass die Antwort auf diese Frage ist nicht offensichtlich, und haben sich auf die HTTP WG's mailing list weiterverfolgt.

UPDATE: Björn H. zu Recht betont:

Abschnitt 3.6 von RFC 2616:

Ein Server, der einen Entity-Body mit einer empfängt Transfer-Codierung es nicht versteht, sollte zurückkehren 501 (nicht implementiert), und schließen Sie die
Verbindung.

So adressiert das schon.

1

Meistens eine persönliche Meinung.

ich dachte immer 5xx Fehler waren eigentliche Programmierfehler, wie etwas umgefallen ist. Wenn ein Server die Anfrage nicht versteht, würde ich sagen, dass ein 4xx Fehler eine bessere Antwort ist, da das Problem mit der Anfrage nicht so ein gescheiterter Prozess auf dem Server ist. Ich bin mir nicht sicher, welche 4xx, aber es gibt ein paar, also sollte man nicht schwer sein.

0

Wahrscheinlich nicht zu verstehen, chunked Codierung sollte ein 500 Interner Server Fehler eher als 501 sein, denn RFC-2616 sagt der Server muss es verstehen.

jedoch, wenn ein Server nicht wählt Anfragen mit chunked Körper zu akzeptieren, und sie will den Client dafür verantwortlich zu machen, eine Art und Weise so legal zu tun wäre 411 Länge erforderlich - da man nicht Content- verwenden müssen Länge und Transfer-Encoding gleichzeitig, und es ist nicht praktisch, eine Anfrage ohne auch nur zu senden.