nginx 411 Content-Length requiredエラーを回避する方法はありますか?


11

content-lengthを指定せずにPUTを実行しようとすると、nginxから411ステータスが返されます。これを無効にする方法はありますか?

nginx 

回答:


10

これをクエリに追加してみてください:

curl -i -X PUT -H 'Content-Length:0' ' http://www.example.com/test '

HttpChunkinModuleをインストールするか、Nginxを1.3.9+に更新してみてください

このモジュールは、Nginx 1.3.9以降では不要になりました。1.3.9以降、Nginxコアにはチャンク化されたリクエスト本文のサポートが既に組み込まれているためです。


5

PUT要求にはContent-Lengthが必要です。Nginxではなく、この要件を作っているのはHTTPです。PUTリクエストは、POSTリクエストのように、必ずコンテンツ本文を持っています。そのボディは長さゼロでも構いませんが、その場合は明示的に言わなければなりません。サーバーは接続が閉じられる前にリクエストに応答できる必要があるため、接続が閉じられるまでコンテンツが継続すると仮定することはできません(これは、content-lengthヘッダーがないことを意味します)。


3
これは間違っています。w3.org/Protocols/rfc2616/rfc2616-sec4.html「リクエスト内のメッセージ本文の存在は、リクエストのメッセージヘッダーにContent-LengthまたはTransfer-Encodingヘッダーフィールドを含めることで通知されます。」これはnginxのバグで、最近のバージョンで修正されています。このバグはPUTのずっと前にPOSTで修正されたことに注意してください。
ニックパーマー

2

古い質問ですが、私がウェブ検索からこれにつまずいたので:

NginX 1.3.9以降では、POSTおよびPUTで「Transfer-Encoding:chunked」をそのまま使用できます。

チャンク転送では、コンテンツの長さを最初に設定せずにファイルを送信できます。


はい、それを修正しました、ありがとう!
rogerdpack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.