2010-04-17 50 views
382

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

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

+7

posible duplicado de [? ¿Cuál es la longitud máxima de una URL] (http : //stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url) – KillianDS

+2

@KillianDS No tiene absolutamente nada que ver con la longitud máxima de una URL. La pregunta es sobre la longitud máxima de una * solicitud * que se envía * a * una URL. – EJP

+1

@EJP el contenido de 'datos' de un GET no es más que un URI. – KillianDS

Respuesta

374

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

La mayoría de los servidores web tienen un límite de 8192 bytes (8KB), que generalmente 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 acerca de esto, he aquí un extracto de chapter 3.2.1:

Nota: Los servidores deben tener cuidado de no dependiendo de URI longitudes superiores a 255 bytes, porque algún cliente más antiguo o las implementaciones de proxy pueden no admitir adecuadamente estas longitudes.

El límite está en MSIE y Safari aproximadamente 2 KB, en Opera sobre 4 KB y en Firefox aproximadamente 8 KB. Por lo tanto, podemos suponer que 8 KB es la longitud máxima posible y que 2 KB es una longitud más asequible para confiar en el servidor y 255 bytes es la longitud más segura para suponer que ingresará toda la URL.

Si el el límite se excede en el navegador o el servidor, la mayoría simplemente truncarán los caracteres fuera del límite sin previo aviso. Algunos servidores pueden enviar un HTTP 414 error. Si necesita enviar datos de gran tamaño, mejor utilice POST en lugar de GET. Su límite es mucho más alto, pero depende más del servidor utilizado que el 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 error/excepción específica del servidor cuando se excede el límite POST, generalmente como error HTTP 500.

+4

Responde la pregunta en términos de limitaciones del navegador. ¿Sabe si existen diferencias entre GET y POST (en términos de tamaño de solicitud problemática) si, por ejemplo, se utiliza HttpClient para interactuar con un servidor REST? – aioobe

+2

Claro, POST usa el cuerpo para enviar los datos. La especificación HTTP no impone un límite de tamaño específico para las publicaciones. –

+0

Está perfectamente permitido por las especificaciones Http para poner un cuerpo en las solicitudes GET y DELETE. Lo probé en Java, y funciona. Lamentablemente, aquí de nuevo algunos proxys podrían cortar todo el cuerpo. –

128

Usted está pidiendo dos preguntas separadas aquí:

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

Como ya se mencionó, HTTP por sí mismo 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).

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

Ese es el que nadie ha respondido.

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

Para el caso de los 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.

2

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

1

Como ya se mencionó, HTTP por sí mismo no impone ningún límite codificado en la longitud de la solicitud; pero los navegadores tienen límites que van del 2048 caracteres permitidos en el método get.

-3

GET REQUEST using chrome browser Sí. 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 el servidor tomcat 8.x que ha devuelto la respuesta esperada 200 OK.

Aquí está la captura de pantalla de petición http cromo (ocultando el punto final he intentado por razones de seguridad):

RESPUESTA GET using chrome browser

Cuestiones relacionadas