Comprimento máximo da solicitação HTTP GET

487

Qual é o tamanho máximo de uma solicitação HTTP GET ?

Existe um erro de resposta definido que o servidor pode / deve retornar se receber uma solicitação GET que excede esse tamanho?

Isso ocorre no contexto de uma API de serviço da web, embora seja interessante ver também os limites do navegador.

Mark Harrison
fonte
10
possível duplicata de Qual é o tamanho máximo de uma URL?
KillianDS
7
@KillianDS Não tem absolutamente nada a ver com o tamanho máximo de uma URL. A pergunta é sobre o tamanho máximo de uma solicitação que é enviada para um URL.
Marquês de Lorne
2
@EJP o conteúdo de 'dados' de um GET não é mais do que um URI.
KillianDS
@JimAho, seu comentário também é uma duplicata do primeiro comentário .....
Jun711 28/18

Respostas:

463

O limite depende do servidor e do cliente usado (e, se aplicável, também do proxy que o servidor ou o cliente está usando).

A maioria dos servidores da Web tem um limite de 8192 bytes (8 KB), que geralmente é configurável em algum lugar na configuração do servidor. Quanto ao assunto do lado do cliente, a especificação HTTP 1.1 até alerta sobre isso. Aqui está um extrato do capítulo 3.2.1 :

Nota: Os servidores devem ser cautelosos ao depender dos comprimentos de URI acima de 255 bytes, porque algumas implementações de cliente ou proxy mais antigas podem não suportar adequadamente esses comprimentos.

O limite no Internet Explorer e Safari é de cerca de 2 KB, no Opera, de 4 KB e no Firefox, de 8 KB. Assim, podemos assumir que 8 KB é o tamanho máximo possível e que 2 KB é um tamanho mais acessível em que confiar no lado do servidor e que 255 bytes é o tamanho mais seguro para supor que todo o URL entrará.

Se o limite for excedido no navegador ou no servidor, a maioria apenas truncará os caracteres fora do limite sem nenhum aviso. Alguns servidores, no entanto, podem enviar um erro HTTP 414 . Se você precisar enviar dados grandes, use melhor o POST em vez de GET. Seu limite é muito maior, mas é mais dependente do servidor usado que o cliente. Geralmente, até cerca de 2 GB são permitidos pelo servidor Web médio. Isso também é configurável em algum lugar nas configurações do servidor. O servidor médio exibirá um erro / exceção específico do servidor quando o limite de POST for excedido, geralmente como um erro HTTP 500.

BalusC
fonte
6
Você responde à pergunta em termos de limitações do navegador. Você sabe se existem diferenças entre GET e POST (em termos de tamanho de solicitação problemático) se, por exemplo, o HttpClient for usado para interagir com um servidor REST?
aioobe
3
Claro, o POST usa o corpo para enviar os dados. A especificação HTTP não impõe um limite de tamanho específico para postagens.
Ignacio A. Poletti
1
É perfeitamente permitido pelas especificações Http colocar um corpo nas solicitações GET e DELETE. Eu testei em Java e funciona. Infelizmente aqui novamente alguns proxys podem cortar o corpo inteiro.
Nicolas Zozol
12
O método Get and Post tem um significado muito específico, portanto, usar um POST para executar um GET é o mesmo que usar um martelo para quebrar um ovo.
Nohros
18
@nohros Isso é idealisticamente verdadeiro, mas o GET também tem limitações que o POST / PUT não. Por exemplo, suponha que você queira executar uma consulta muito longa envolvendo vários IDs; se você seleciona centenas de IDs, isso pode violar o limite do tamanho permitido do URL, enquanto colocar essa consulta em um POST pode evitar isso, mesmo que não faça tanto sentido conceitualmente. Pessoalmente, desejo que as solicitações GET permitidas pelo HTTP tenham corpos como PUT e POST.
devios1
143

Você está fazendo duas perguntas separadas aqui:

Qual é o tamanho máximo de uma solicitação HTTP GET?

Como já mencionado, o próprio HTTP não impõe nenhum limite embutido no tamanho da solicitação; mas os navegadores têm limites que variam de 2 a 8 KB (255 bytes, se contarmos com navegadores muito antigos ).

Existe um erro de resposta definido que o servidor pode / deve retornar se receber uma solicitação GET exceder esse comprimento?

Essa é a pessoa que ninguém respondeu.

O HTTP 1.1 define o código de status 414 Request-URI Too Longpara os casos em que um limite definido pelo servidor é atingido. Você pode ver mais detalhes na RFC 2616 .

No caso de limites definidos pelo cliente, não há sentido em o servidor retornar algo, porque o servidor não receberá a solicitação.

Edurne Pascual
fonte
23

Os limites do navegador são:

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

Quer mais? Veja esta pergunta no estouro de pilha .

Jiraff537
fonte
3

Tecnicamente, vi que o HTTP GET terá problemas se o comprimento da URL ultrapassar os 2000 caracteres. Nesse caso, é melhor usar o HTTP POST ou dividir o URL.

MSIslam
fonte
2

Como já mencionado, o próprio HTTP não impõe nenhum limite embutido no tamanho da solicitação; mas os navegadores têm limites que variam no caractere 2048 permitido no método GET.

Sandeep Kumar
fonte
-6

OBTER PEDIDO usando o navegador Chrome

Sim. Não há limite para uma solicitação GET.

Consigo enviar ~ 4000 caracteres como parte da string de consulta usando o navegador Chrome e o comando curl.

Estou usando o servidor Tomcat 8.x, que retornou a resposta 200 OK esperada.

Aqui está a captura de tela de uma solicitação HTTP do Google Chrome (ocultando o terminal que tentei devido a razões de segurança):

RESPOSTA

GET usando o navegador Chrome

Lokendra Chauhan
fonte