Un en-tête Content-Length est requis.
Quand l’utiliser
Envois sans taille déclarée.
Causes courantes et solutions
Le serveur refuse une requête qui a un corps mais pas d’en-tête Content-Length. Cela arrive quand un client diffuse en Transfer-Encoding: chunked vers un serveur ou un proxy qui rejette les envois chunked, ou envoie un POST sans corps ni longueur. Google Cloud Storage et certains serveurs plus anciens exigent notoirement Content-Length: 0 sur les requêtes POST vides.
Corrigez côté client : mettez le corps en mémoire tampon pour que la bibliothèque puisse définir la longueur, ou définissez l’en-tête vous-même. curl -d définit Content-Length automatiquement, mais curl -X POST sans données n’en envoie pas : ajoutez -H Content-Length:0. En HTTP/2 et HTTP/3, les trames marquent la fin du corps, le problème est donc propre à HTTP/1.1. nginx accepte les corps de requête chunked depuis la version 1.3.9.
Erreur client (4xx)
Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.
À quoi ça ressemble
HTTP/1.1 411 Length RequiredComment l’envoyer
| Node.js / Express | res.status(411).end() |
|---|---|
| Python / Flask | return '', 411 |
| nginx | return 411; |
Comment le vérifier
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/