Existe-t-il un moyen d'éviter les erreurs requises par nginx 411 Content-Length?


11

Je reçois un statut 411 de nginx lorsque j'essaie de faire un PUT sans spécifier la longueur du contenu. Existe-t-il un moyen de désactiver cela?

nginx 

Réponses:


10

Vous pouvez essayer d'ajouter ceci à votre requête:

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

Essayez d'installer le HttpChunkinModule ou de mettre à jour Nginx vers 1.3.9+

Ce module n'est plus nécessaire pour Nginx 1.3.9+ car depuis la version 1.3.9, le noyau Nginx a déjà un support intégré pour les corps de requête fragmentés.


5

Les demandes PUT nécessitent Content-Length. Ce n'est pas Nginx, c'est HTTP qui fait cette exigence. Les requêtes PUT, comme les requêtes POST, ont nécessairement un corps de contenu. Ce corps peut être de longueur nulle, mais si c'est le cas, vous devez le dire explicitement. Évidemment, vous ne pouvez pas supposer que le contenu continue jusqu'à ce que la connexion soit fermée (c'est ce qu'implique un en-tête de longueur de contenu absent), car le serveur doit être en mesure de répondre à la demande avant la fermeture de la connexion.


3
Ceci est une erreur. w3.org/Protocols/rfc2616/rfc2616-sec4.html "La présence d'un corps de message dans une demande est signalée par l'inclusion d'un champ d'en-tête Content-Length ou Transfer-Encoding dans les en-têtes de message de la demande." Il s'agit d'un bogue dans nginx qui est corrigé dans les versions plus récentes. Notez que ce bogue a été corrigé pour POST bien avant PUT.
Nick Palmer

2

Question ancienne, mais depuis que je suis tombé sur cela à partir d'une recherche sur le Web:

NginX 1.3.9 et supérieur prend en charge "Transfer-Encoding: chunked" hors de la boîte pour POST et PUT.

Avec le transfert par blocs, vous pouvez envoyer des fichiers sans définir d'abord la longueur du contenu.


Ouais qui l'a réparé, merci!
rogerdpack
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.