Longitud máxima de solicitud HTTP GET

488

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

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

Esto está en el contexto de una API de servicio web, aunque también es interesante ver los límites del navegador.

Mark Harrison
fuente
10
posible duplicado de ¿Cuál es la longitud máxima de una URL?
KillianDS
77
@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.
Marqués de Lorne
2
@EJP el contenido de 'datos' de un GET no es más que un URI.
KillianDS
@JimAho tu comentario es un duplicado del primer comentario también .....
Jun711

Respuestas:

464

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 (8 KB), que generalmente se puede configurar en algún lugar de la configuración del servidor. En cuanto al asunto 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 superiores a 255 bytes, ya que algunas implementaciones de cliente o proxy más antiguas podrían no ser compatibles con estas longitudes.

El límite en Internet Explorer y Safari es de aproximadamente 2 KB, en Opera de aproximadamente 4 KB y en Firefox de 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 lado del servidor y que 255 bytes es la longitud más segura para suponer que entrará toda la URL.

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. Sin embargo, algunos servidores pueden enviar un error HTTP 414 . Si necesita enviar datos grandes, mejor use POST en lugar de GET. Su límite es mucho más alto, pero depende más 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 error / excepción específico del servidor cuando se exceda el límite POST, generalmente como un error HTTP 500.

BalusC
fuente
66
Responde la pregunta en términos de limitaciones del navegador. ¿Sabes si hay alguna diferencia entre GET y POST (en términos de tamaño de solicitud problemático) si, por ejemplo, HttpClient se usa para interactuar con un servidor REST?
aioobe
3
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.
Ignacio A. Poletti
1
Está perfectamente permitido por las especificaciones Http para poner un cuerpo en las solicitudes GET y DELETE. Lo probé en Java y funciona. Desafortunadamente, aquí nuevamente algunos proxys podrían cortar todo el cuerpo.
Nicolas Zozol
12
El método Get and Post tiene un significado muy específico, por lo que usar un POST para realizar un GET es lo mismo que usar un martillo para romper un huevo.
nohros
18
@nohros Eso es idealmente cierto, pero GET también tiene limitaciones que POST / PUT no tienen. Por ejemplo, suponga que desea realizar una consulta muy larga que involucra un montón de identificadores; si está seleccionando cientos de identificadores, eso puede violar el límite del tamaño de URL permitido, mientras que poner esa consulta en una POST puede evitar eso, incluso si no tiene tanto sentido conceptual. Personalmente, deseo que HTTP permita que las solicitudes GET tengan cuerpos como PUT y POST.
devios1
143

Estás 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 oscilan entre 2 KB y 8 KB (255 bytes si contamos los navegadores muy antiguos ).

¿Se ha definido un error de respuesta que el servidor puede / debería 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 Longpara los casos en que se alcanza un límite definido por el servidor. Puede ver más detalles sobre 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.

Edurne Pascual
fuente
23

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
Internet Explorer 11   2047           5120
Edge 16                2047          10240

¿Quieren más? Vea esta pregunta en Desbordamiento de pila .

Jiraff537
fuente
3

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

MSIslam
fuente
2

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 varían en el carácter 2048 permitido en el método GET.

Sandeep Kumar
fuente
-6

OBTENER SOLICITUD usando el navegador Chrome

Si. No hay ningún límite en una solicitud GET.

Puedo enviar ~ 4000 caracteres como parte de la cadena de consulta utilizando el navegador Chrome y el comando curl.

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

Aquí está la captura de pantalla de una solicitud HTTP de Google Chrome (ocultando el punto final que probé por razones de seguridad):

RESPUESTA

OBTENER usando el navegador Chrome

Lokendra Chauhan
fuente