HTTPQUERY
Français

414 URI Too Long

Utilisation

Lorsque le message d’erreur 414 URI Too Long est reçu, le client comprend que le serveur attend un chemin ou une adresse HTTP plus courts. Bien que la spécification n’impose aucune exigence de longueur, les navigateurs en limitent la taille en pratique afin de prévenir certains types d’attaques.

Les serveurs, les proxies inverses et les frameworks imposent chacun leurs propres limites de longueur d’URI. Les valeurs par défaut courantes vont de 4 Ko à 8 Ko, même si aucune spécification ne définit de maximum.

La réponse 414 URI Too Long est par défaut mise en cache.

Impact SEO

Les moteurs de recherche comme Google n’indexeront pas une URL dont le statut de réponse est 414. Les URL précédemment indexées seront retirées des résultats de recherche.

Exemple

Le client demande une ressource au moyen d’une URI dépassant ce que le serveur autorise.

Requête

GET /<...a_long_URI...> HTTP/1.1
Host: example.com

Réponse

HTTP/1.1 414 URI Too Long

Comment corriger

La cause la plus fréquente est une requête GET comportant trop de paramètres de requête, ou des valeurs excessivement longues encodées dans l’URL. Une boucle de redirection ou une règle de réécriture mal configurée qui ajoute des paramètres à chaque cycle déclenche également cette erreur.

Correctifs côté client :

nginx : augmentez large_client_header_buffers afin d’autoriser des lignes de requête plus longues. La directive prend deux valeurs : le nombre de tampons et leur taille, par exemple large_client_header_buffers 4 32k. Redémarrez nginx pour appliquer la modification.

Apache : définissez LimitRequestLine dans httpd.conf sur une valeur d’octets plus élevée. La valeur par défaut est de 8190 octets. Des valeurs allant jusqu’à 128000 sont courantes pour les applications aux URL longues. Redémarrez Apache après la modification.

IIS : modifiez maxUrl et maxQueryString dans le fichier web.config, sous system.webServer > security > requestFiltering > requestLimits. Les valeurs par défaut sont de 4096 octets pour la longueur de l’URL et de 2048 octets pour les chaînes de requête. Gardez ces valeurs aussi basses que possible : des limites d’URL élevées accroissent l’exposition aux attaques par injection.

Lorsque l’erreur apparaît dans un navigateur plutôt que dans une API, vider le cache et les cookies du navigateur résout parfois le problème, en particulier lorsque des cookies périmés gonflent la taille des en-têtes de requête au-delà des limites du serveur.

Références de code

.NET

HttpStatusCode.RequestUriTooLong

Rust

http::StatusCode::URI_TOO_LONG

Rails

:uri_too_long
:request_uri_too_long

Go

http.StatusRequestURITooLong

Symfony

Response::HTTP_REQUEST_URI_TOO_LONG

Python3.5+

http.HTTPStatus.REQUEST_URI_TOO_LONG

Java

java.net.HttpURLConnection.HTTP_REQ_TOO_LONG

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_REQUEST_URI_TOO_LONG

Angular

@angular/common/http/HttpStatusCode.UriTooLong