411 Length Required
Utilisation
Lorsque le message d’erreur 411 Length Required est reçu, la requête doit être soumise à nouveau en incluant l’en-tête Content-Length. Les requêtes HTTP utilisent généralement cet en-tête pour indiquer la longueur du corps du message, mais pas systématiquement. Par exemple, lorsque le champ d’en-tête Transfer-Encoding est présent et vaut chunked, le champ d’en-tête Content-Length n’est pas requis.
Si le client envoie un flux de données et que ce statut est renvoyé, les données doivent être envoyées à la place sous forme de blocs de taille spécifiée.
Impact SEO
Les moteurs de recherche comme Google n’indexent pas une URL dont la réponse porte le statut 411 Length Required. Les URL précédemment indexées sont retirées des résultats de recherche. Les pages renvoyant ce code ne consomment pas de budget d’exploration.
Exemple
Le client tente d’envoyer un fichier, mais le serveur refuse la requête avec 411 Length Required, car la longueur du corps du message n’est pas précisée.
Requête
PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
<PDF file included as message body>
Réponse
HTTP/1.1 411 Length Required
Comment corriger
Ajoutez un en-tête Content-Length indiquant le nombre exact d’octets du corps de la requête. La plupart des bibliothèques clientes HTTP calculent cette valeur automatiquement lors de l’envoi d’une chaîne ou d’un tampon. Vérifiez que la bibliothèque ne supprime pas l’en-tête et n’en fixe pas la valeur à zéro.
Lorsque la requête utilise un Transfer-Encoding chunked, c’est que le serveur cible n’accepte pas les corps chunked. Mettez d’abord en tampon la charge utile complète, mesurez sa longueur en octets, puis envoyez le corps accompagné d’un en-tête Content-Length.
Les proxys et les pare-feu suppriment ou modifient parfois des en-têtes en transit. Si le client envoie correctement Content-Length mais que le serveur renvoie malgré tout 411, inspectez la requête côté serveur pour confirmer que l’en-tête arrive intact.
Dans curl, l’option -d définit Content-Length automatiquement. Pour Transfer-Encoding: chunked avec curl, utilisez -H “Transfer-Encoding: chunked”, mais uniquement lorsque le serveur prend en charge les transferts chunked.
Côté serveur, ce statut est souvent renvoyé par des configurations strictes ou par d’anciens serveurs HTTP/1.0 ne prenant pas en charge l’encodage chunked. L’administrateur du serveur définit cette politique délibérément, et la correction se situe toujours du côté client.
411 dans les outils de test d’API
Des outils comme Postman et curl gèrent l’en-tête Content-Length automatiquement pour la plupart des types de requêtes. Une erreur 411 dans Postman survient typiquement lors de l’envoi d’un corps vide sur une requête POST ou PUT sans avoir sélectionné de type de corps. Choisir un format de corps (raw, form-data ou x-www-form-urlencoded) amène Postman à définir correctement l’en-tête Content-Length.
Références de code
.NET
HttpStatusCode.LengthRequired
Rust
http::StatusCode::LENGTH_REQUIRED
Rails
:length_required
Go
http.StatusLengthRequired
Symfony
Response::HTTP_LENGTH_REQUIRED
Python3.5+
http.HTTPStatus.LENGTH_REQUIRED
Java
java.net.HttpURLConnection.HTTP_LENGTH_REQUIRED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_LENGTH_REQUIRED
Angular
@angular/common/http/HttpStatusCode.LengthRequired