Gibt es eine Möglichkeit, Fehler zu vermeiden, die für nginx 411 Content-Length erforderlich sind?

11

Ich erhalte einen 411-Status von nginx zurück, wenn ich versuche, einen PUT ohne Angabe der Inhaltslänge durchzuführen. Gibt es eine Möglichkeit, dies zu verhindern?


quelle

Antworten:

5

PUT-Anforderungen erfordern Content-Length. Es ist nicht Nginx, sondern HTTP, das diese Anforderung stellt. PUT-Anforderungen haben wie POST-Anforderungen notwendigerweise einen Inhaltskörper. Dieser Körper kann eine Länge von Null haben, aber wenn dies der Fall ist, müssen Sie dies ausdrücklich sagen. Natürlich können Sie nicht davon ausgehen, dass der Inhalt fortgesetzt wird, bis die Verbindung geschlossen wird (was ein fehlender Header mit Inhaltslänge impliziert), da der Server in der Lage sein muss, auf die Anforderung zu antworten, bevor die Verbindung geschlossen wird.

tylerl
quelle
3
Das ist falsch. w3.org/Protocols/rfc2616/rfc2616-sec4.html "Das Vorhandensein eines Nachrichtentexts in einer Anforderung wird durch die Aufnahme eines Headerfelds für Inhaltslänge oder Übertragungscodierung in die Nachrichtenkopfzeilen der Anforderung signalisiert." Dies ist ein Fehler in Nginx, der in neueren Versionen behoben wurde. Beachten Sie, dass dieser Fehler für POST lange vor PUT behoben wurde.
Nick Palmer
2

Alte Frage, aber da ich von einer Websuche darauf gestoßen bin:

NginX 1.3.9 und höher unterstützt "Transfer-Encoding: Chunked" für POST und PUT.

Mit Chunked Transfer können Sie Dateien senden, ohne zuerst die Länge des Inhalts festzulegen.

Deestan
quelle
Ja, das hat es behoben, danke!
Rogerdpack