longitud máxima de la solicitud HTTP GET?


¿Cuál es la longitud máxima de una solicitud HTTP GET? ¿Hay un error de respuesta definido que el servidor puede / debe devolver si recibe una solicitud GET que excede esta longitud?

Actualización: como se indica en las etiquetas, esto es en el contexto de una API de servicio web, aunque es interesante ver los límites del navegador también.

Author: Mark Harrison, 2010-04-18

7 answers

El límite depende tanto del servidor como del cliente utilizado (y si corresponde, también del proxy que esté utilizando el servidor o el cliente).

La mayoría de los servidores web tienen un límite de 8192 bytes (8KB), que normalmente se puede configurar en algún lugar de la configuración del servidor. En cuanto a la cuestión del lado del cliente, la especificación HTTP 1.1 incluso advierte sobre esto, aquí hay un extracto del capítulo 3.2.1:

Nota: Los servidores deben tener cuidado al depender de las longitudes de URI arriba 255 bytes, porque algún cliente o proxy más antiguo es posible que las implementaciones no admitan correctamente estas longitudes.

El límite es en MSIE y Safari de unos 2 KB, en Opera de unos 4 KB y en Firefox de unos 8 KB. Por lo tanto, podemos asumir que 8KB es la longitud máxima posible y que 2KB es una longitud más asequible para confiar en el lado del servidor y que 255 bytes es la longitud más segura para asumir que toda la URL entrará.

Si se excede el límite en el navegador o en el servidor, la mayoría simplemente truncará los caracteres fuera del límite sin ninguna advertencia. Algunos servidores sin embargo pueden enviar un error HTTP 414. Si necesita enviar grandes datos, entonces mejor use POST en lugar de GET. Su límite es mucho mayor, pero más dependiente del servidor utilizado que del cliente. Por lo general, el servidor web promedio permite hasta alrededor de 2 GB. Esto también se puede configurar en algún lugar de la configuración del servidor. El servidor promedio mostrará un servidor específico error / excepción cuando se excede el límite de POST, generalmente como error HTTP 500.

 396
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-17 20:53:35

Usted está haciendo dos preguntas separadas aquí:

¿Cuál es la longitud máxima de una solicitud HTTP GET?

Como ya se mencionó, HTTP en sí no impone ningún límite codificado en la longitud de la solicitud; pero los navegadores tienen límites que van de 2kb a 8kb (255 bytes si contamos navegadores muy antiguos).

¿Hay un error de respuesta definido que el servidor puede/debe devolver si recibe una solicitud GET que excede esta longitud?

Esa es la uno que nadie ha contestado.

HTTP 1.1 define el Código de estado 414 Request-URI Too Long para los casos en los que se alcanza un límite definido por el servidor. Puede ver más detalles en RFC 2616.

Para el caso de límites definidos por el cliente, no tiene sentido que el servidor devuelva algo, porque el servidor no recibirá la solicitud en absoluto.

Espero que esto ayude.

 131
Author: Edurne Pascual,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-13 20:54:53

Pregunta similar aquí: ¿Hay un límite en la longitud de una solicitud GET?

He llegado al límite y en mi cuenta de alojamiento compartido, pero el navegador devolvió una página en blanco antes de llegar al servidor, creo.

 4
Author: jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:53

Los límites del navegador son:

Browser     Address bar   document.location  
                          or anchor tag
------------------------------------------
Chrome          32779           >64k      
Android          8192           >64k                         
Firefox          >64k           >64k      
Safari           >64k           >64k      
IE11             2047           5120   
Edge 16          2047          10240

¿Quieres más? ver esta pregunta sobre Stack Overfollow

 4
Author: Jiraff537,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-24 13:05:30

Técnicamente he visto que HttpGet tendrá problemas si la longitud de la URL va más allá de 2000 caracteres. En ese caso, es mejor usar HttpPost o dividir la URL.

 3
Author: MSIslam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-25 19:39:31

Como ya se mencionó, HTTP en sí no impone ningún límite codificado en la longitud de la solicitud; pero los navegadores tienen límites que van desde el carácter 2048 permitido en el método get.

 1
Author: Sandeep Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-08 13:41:37

OBTENER SOLICITUD usando el navegador chromeSí. No hay límite en la solicitud GET.

I am able to send ~4000 characters as part of the query string using chrome browser & curl command both. 

Estoy usando tomcat 8.servidor x que ha devuelto la respuesta esperada 200 OK.

Aquí está la captura de pantalla de chrome http request (ocultando el punto final que intenté debido a razones de seguridad):

RESPUESTAOBTENER el uso del navegador chrome

 -2
Author: Lokendra Chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-03 16:11:33