431 Request Header Fields Too Large
Utilisation
Le code de statut 431 Request Header Fields Too Large indique que le serveur refuse de traiter la requête HTTP parce que les en-têtes HTTP contiennent trop de données.
Selon le serveur, cela concerne la longueur totale des en-têtes HTTP combinés ou celle de certains en-têtes en particulier. Dans les deux cas, le client a la possibilité de retirer un ou plusieurs en-têtes HTTP et de relancer la requête. Une solution envisageable pour limiter le volume des en-têtes HTTP consiste à supprimer ou à réduire les Cookies transmis.
Impact SEO
Les moteurs de recherche comme Google n’indexeront pas une URL dont la réponse porte le statut 431. Les URL précédemment indexées qui renvoient ce code de statut seront retirées des résultats de recherche.
Exemple
Le client demande une ressource et le serveur répond 431 Request Header Fields Too Large parce que la combinaison de deux valeurs de cookies volumineuses dépasse la limite maximale fixée par le serveur pour les en-têtes HTTP.
Requête
GET /tech-news HTTP/1.1
Host: example.com
Cookie: first_cookie=<very_long>; second_cookie=<long_again>
Réponse
HTTP/1.1 431 Request Header Fields Too Large
Content-Type: text/html
Content-Length: 183
<html>
<head>
<title>Request Headers Too Long</title>
</head>
<body>
<p>The request headers are too long.
Try retrying without cookies.</p>
</body>
</html>
Comment corriger
Effacez les Cookies du domaine concerné dans le navigateur. L’accumulation de cookies est la cause la plus fréquente. Les scripts tiers, les balises d’analytique et les pixels marketing déposent des cookies à chaque visite, et leur taille cumulée finit par dépasser la limite du serveur. Commencez par effacer les cookies propres au site avant de procéder à une purge complète des cookies du navigateur.
Réduisez la valeur des en-têtes personnalisés envoyés avec les requêtes. Les jetons d’autorisation trop longs, les en-têtes X-Custom-* surdimensionnés et les paramètres de requête encodés en URL intégrés aux en-têtes contribuent tous à la taille totale.
Côté serveur, augmentez les limites des tampons d’en-têtes :
Auditez l’usage des cookies sur l’ensemble du site. Limitez le nombre de cookies déposés par domaine et utilisez les attributs SameSite, Path et Domain pour empêcher les cookies de se propager vers des sous-domaines et des chemins où ils ne sont pas nécessaires. Déplacez les données de session vers un stockage côté serveur ou vers localStorage lorsqu’elles n’ont pas besoin d’accompagner chaque requête.
Relever les limites du serveur au-delà de 32 Ko introduit un risque de déni de service. N’augmentez les limites que dans la mesure nécessaire pour absorber le trafic légitime, et accompagnez ce changement d’une surveillance de la taille des requêtes.
Chrome et les erreurs 431
Chrome affiche « Bad Request - Request Header Field Too Long » ou « Bad message 431 » lorsque les Cookies accumulés pour un domaine poussent les en-têtes de requête au-delà de la limite du serveur. Effacer les Cookies du site concerné dans les paramètres de Chrome (Paramètres > Confidentialité > Cookies > Afficher toutes les données des sites) résout l’erreur immédiatement, sans affecter les autres sites.
Références de code
.NET
HttpStatusCode.RequestHeaderFieldsTooLarge
Rust
http::StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE
Rails
:request_header_fields_too_large
Go
http.StatusRequestHeaderFieldsTooLarge
Symfony
Response::HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE
Python3.5+
http.HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_REQUEST_HEADER_FIELDS_TOO_LARGE
Angular
@angular/common/http/HttpStatusCode.RequestHeaderFieldsTooLarge