Apakah ada cara untuk menghindari kesalahan nginx 411 Content-Length diperlukan?

11

Saya mendapatkan status 411 kembali dari nginx ketika mencoba melakukan PUT tanpa menentukan panjang konten. Apakah ada cara untuk menonaktifkan ini terjadi?


sumber

Jawaban:

10

Anda dapat mencoba menambahkan ini ke permintaan Anda:

curl -i -X ​​PUT -H 'Panjang Konten: 0' ' http://www.example.com/test '

Coba instal HttpChunkinModule atau perbarui Nginx ke 1.3.9+

Modul ini tidak lagi diperlukan untuk Nginx 1.3.9+ karena sejak 1.3.9, inti Nginx sudah memiliki dukungan bawaan untuk badan permintaan yang terpotong-potong.

Studer
sumber
5

Permintaan PUT membutuhkan Panjang Konten. Ini bukan Nginx, itu HTTP yang membuat persyaratan ini. Permintaan PUT, seperti permintaan POST, tentu memiliki badan konten. Tubuh itu bisa panjangnya nol, tetapi jika ya maka Anda harus mengatakannya secara eksplisit. Jelas Anda tidak dapat mengasumsikan bahwa konten berlanjut sampai koneksi ditutup (yang merupakan implikasi dari header panjang konten yang tidak ada), karena server harus dapat menanggapi permintaan sebelum koneksi ditutup.

tylerl
sumber
3
ini tidak benar. w3.org/Protocols/rfc2616/rfc2616-sec4.html "Kehadiran badan pesan dalam permintaan ditandai dengan dimasukkannya bidang header Panjang-Konten atau Transfer-Pengkodean dalam tajuk pesan permintaan." Ini adalah bug di nginx yang diperbaiki di versi yang lebih baru. Perhatikan bahwa bug ini telah diperbaiki untuk POST jauh sebelum PUT.
Nick Palmer
2

Pertanyaan lama, tapi karena saya menemukan ini dari pencarian web:

NginX 1.3.9 dan di atasnya mendukung "Transfer-Encoding: chunked" di luar kotak untuk POST dan PUT.

Dengan transfer terpotong, Anda dapat mengirim file tanpa mengatur panjang konten terlebih dahulu.

Deestan
sumber
Yap yang memperbaikinya, terima kasih!
rogerdpack