¿Hay alguna manera de evitar los errores requeridos de nginx 411 Content-Length?

11

Recibo un estado 411 de nginx cuando intento hacer un PUT sin especificar la longitud del contenido. ¿Hay alguna forma de desactivar esto?


fuente

Respuestas:

10

Podría intentar agregar esto a su consulta:

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

Intente instalar HttpChunkinModule o actualice Nginx a 1.3.9+

Este módulo ya no es necesario para Nginx 1.3.9+ porque desde 1.3.9, el núcleo de Nginx ya tiene soporte incorporado para los cuerpos de solicitud fragmentados.

Studer
fuente
5

Las solicitudes PUT requieren Content-Length. No es Nginx, es HTTP el que hace este requisito. La solicitud PUT, como las solicitudes POST, necesariamente tiene un cuerpo de contenido. Ese cuerpo puede ser de longitud cero, pero si es así, debe decirlo explícitamente. Obviamente, no puede suponer que el contenido continúa hasta que se cierra la conexión (que es lo que implica un encabezado de longitud de contenido ausente), porque el servidor debe poder responder a la solicitud antes de que se cierre la conexión.

tylerl
fuente
3
Esto es incorrecto. w3.org/Protocols/rfc2616/rfc2616-sec4.html "La presencia de un cuerpo de mensaje en una solicitud se señala mediante la inclusión de un campo de encabezado Content-Length o Transfer-Encoding en los encabezados de mensaje de la solicitud". Este es un error en nginx que se corrige en versiones más recientes. Tenga en cuenta que este error se corrigió para POST mucho antes de PUT.
Nick Palmer
2

Pregunta antigua, pero desde que me topé con esto desde una búsqueda en la web:

NginX 1.3.9 y superior admite "Transfer-Encoding: fragmentado" fuera de la caja para POST y PUT.

Con la transferencia fragmentada, puede enviar archivos sin configurar primero la longitud del contenido.

Deestan
fuente
Sí, eso lo arregló, ¡gracias!
rogerdpack