414 URI Too Long
Uso
Cuando se recibe el mensaje de error 414 URI Too Long, el cliente entiende que el servidor espera una ruta o dirección HTTP más corta. Aunque la especificación no establece ningún requisito de longitud, en la práctica los navegadores limitan su tamaño para prevenir ciertos tipos de ataques.
Los servidores, los proxies inversos y los frameworks imponen cada uno sus propios límites de longitud de URI. Los valores predeterminados habituales van de 4 KB a 8 KB, aunque ninguna especificación define un máximo.
La respuesta 414 URI Too Long es almacenable en caché de forma predeterminada.
Impacto en SEO
Los motores de búsqueda como Google no indexan una URL con un estado de respuesta 414. Las URL indexadas previamente se eliminan de los resultados de búsqueda.
Ejemplo
El cliente solicita un recurso usando un URI que supera lo que el servidor permite.
Solicitud
GET /<...a_long_URI...> HTTP/1.1
Host: example.com
Respuesta
HTTP/1.1 414 URI Too Long
Cómo solucionarlo
La causa más habitual es una solicitud GET con demasiados parámetros de consulta o con valores excesivamente largos codificados en la URL. Un bucle de redirección o una regla de reescritura mal configurada que añade parámetros en cada ciclo también desencadenan este error.
Soluciones del lado del cliente:
nginx: Aumente large_client_header_buffers para permitir líneas de solicitud más largas. La directiva toma dos valores: el número de búferes y su tamaño, por ejemplo large_client_header_buffers 4 32k. Reinicie nginx para aplicarlo.
Apache: Establezca LimitRequestLine en httpd.conf con un valor de bytes más alto. El valor predeterminado es 8190 bytes. Valores de hasta 128000 son habituales en aplicaciones con URL largas. Reinicie Apache después del cambio.
IIS: Edite maxUrl y maxQueryString en el archivo web.config, en system.webServer > security > requestFiltering > requestLimits. Los valores predeterminados son 4096 bytes para la longitud de la URL y 2048 bytes para las cadenas de consulta. Mantenga estos valores tan bajos como sea viable. Unos límites de URL elevados aumentan la exposición a ataques de inyección.
Cuando el error aparece en un navegador y no en una API, borrar la caché y las cookies del navegador a veces resuelve el problema, sobre todo cuando unas cookies obsoletas inflan el tamaño de la cabecera de la solicitud por encima de los límites del servidor.
Referencias de código
.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