มีวิธีการหลีกเลี่ยงข้อผิดพลาดที่ต้องใช้ความยาวเนื้อหา nginx 411 หรือไม่?


11

ฉันได้รับสถานะ 411 จาก nginx เมื่อพยายามทำ PUT โดยไม่ระบุความยาวของเนื้อหา มีวิธีใดในการปิดใช้งานสิ่งนี้ไม่ให้เกิดขึ้น

nginx 

คำตอบ:


10

คุณสามารถลองเพิ่มลงในข้อความค้นหาของคุณ:

curl -i -X ​​PUT -H 'ความยาวเนื้อหา: 0' ' http://www.example.com/test '

ลองติดตั้งHttpChunkinModuleหรืออัปเดตNginx เป็น 1.3.9+

โมดูลนี้ไม่จำเป็นสำหรับ Nginx 1.3.9+ อีกต่อไปเนื่องจากตั้งแต่ 1.3.9 แกน Nginx มีการสนับสนุนในตัวสำหรับเนื้อหาคำขอที่มีการเปลี่ยนแปลง


5

คำขอ PUT ต้องการความยาวเนื้อหา ไม่ใช่ Nginx แต่เป็น HTTP ที่ทำตามข้อกำหนดนี้ คำขอ PUT เช่นคำขอ POST จำเป็นต้องมีเนื้อหาเนื้อหา เนื้อความนั้นอาจมีความยาวเป็นศูนย์ แต่ถ้าเป็นเช่นนั้นคุณต้องพูดอย่างชัดเจน เห็นได้ชัดว่าคุณไม่สามารถสันนิษฐานได้ว่าเนื้อหาจะดำเนินต่อไปจนกว่าการเชื่อมต่อจะถูกปิด (ซึ่งเป็นสิ่งที่ส่วนหัวที่มีความยาวเนื้อหาขาดหายไป) เพราะเซิร์ฟเวอร์จะต้องสามารถตอบสนองต่อคำขอก่อนที่จะปิดการเชื่อมต่อ


3
สิ่งนี้ไม่ถูกต้อง w3.org/Protocols/rfc2616/rfc2616-sec4.html "การปรากฏตัวของเนื้อหาข้อความในคำขอจะถูกส่งสัญญาณโดยการรวมของส่วนหัวของเนื้อหาความยาวหรือเข้ารหัสโอนในส่วนหัวของข้อความคำขอ" นี่เป็นข้อผิดพลาดใน nginx ที่ได้รับการแก้ไขในรุ่นที่ใหม่กว่า โปรดทราบว่าข้อผิดพลาดนี้ได้รับการแก้ไขสำหรับ POST ก่อน PUT
Nick Palmer

2

คำถามเก่า ๆ แต่เนื่องจากฉันพบสิ่งนี้จากการค้นหาเว็บ:

NginX 1.3.9 และสูงกว่ารองรับ "การโอนถ่ายการเข้ารหัส: แยก" ออกจากกล่องสำหรับ POST และ PUT

ด้วยการถ่ายโอนแบบแยกชิ้นคุณสามารถส่งไฟล์โดยไม่ต้องตั้งค่าความยาวเนื้อหาก่อน


ใช่ว่าจะแก้ไขมันขอบคุณ!
rogerdpack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.