Por enviar os dados no cabeçalho da requisição, o GET tem um limite máximo de dados a serem enviados; geralmente esse limite é definido pelo número de caracteres da string de requisição (query string), alguns afirmam que o limite é 255 caracteres, outros que o limite do GET é 1024, outros dizem que é 2048.
Porém esse limite varia de acordo com as configurações da linguagem utilizada, do servidor web utilizado (Apache, Nginx, IIS, etc); contudo, se tentarmos passar uma grande quantidade de informações via GET, algumas partes podem ser perdidas no caminho, lembrando que o GET só aceita caracteres ASCII, grosso modo, somente texto.
Para o POST o tamanho do URI na barra de endereços também influencia, não no envio de dados, pois estes são enviados no corpo da requisição, mas influencia no comprimento, na quantidade de caracteres que o navegador e/ou o servidor aceitam.
TESTE EM NAVEGADORES
Copiando o conteúdo de um arquivo texto com 37.553 mil caracteres aleatórios, usando Notepadqq no
Linux, Notepad++ no Windows e no macOS o editor de texto padrão do Mac, fui colando na barra de endereços do Edge, do Chrome, do Firefox, do Opera e do Safari (macOS), sendo que aumentava o conteúdo do arquivo na medida que o navegador aceitava o conteúdo aumentado.
Depois copiava da barra de endereços e colava em um arquivo em branco para ver a quantidade de caracteres exibidos.
Talvez os números abaixo variem de acordo com o sistema operacional e outros fatores como a codificação do servidor, etc; porém, as configurações estando nos padrões, a variação será de poucos caracteres podendo ser desconsiderada para este teste.
Os testes foram feitos em dois lugares diferentes com bandas de internet diferentes e sistemas operacionais diferentes:
O Edge aceitou 62.877 caracteres, mas ao solicitar (dar enter) exibiu a mensagem "404. That's an error The requested URL ... was not found on this server.", o que é óbvio.
O Chrome a mesma coisa.
O Opera aceitou 26.934 caracteres e ao solicitar (dar enter) apresentava a mensagem "404.. not found", o que é óbvio, e foi o único que travou quando ultrapassava o limite, sendo que ao colar com o limite excedido na barra de endereços travava e voltava com a mensagem "O Ópera se recuperou de uma falha...", ou seja, nem deixava colar e quando estava dentro do limite apresentava a mensagem de erro 400 "... malformed or illegal request".
O Safari apresentava a mensagem "O Safari não pode abrir a página", o que é óbvio.
O Safari exibe na barra de endereços 6.370 caracteres, porém, aceita 253.864 caracteres (ou mais).
Os limites que encontrei são os seguintes:
- Edge: aceita 62.877 caracteres, exibe 10.104;
- Chrome: aceita 62.877 caracteres, exibe 10.115;
- Firefox: 61.960 caracteres, exibe 31.733;
- Opera: 26.934 caracteres, exibe 10.231;
- Safari: 253.864 caracteres (o Safari provavelmente aceita mais caracteres, pois parei de testar nesse limite), exibe 6.370.
Com exceção do Opera, quando excedia o limite suportado pelo URI (barra de endereços), os navegadores apresentavam a mensagem de erro 413, por exemplo, no Chrome: "413. That's an error. Your client issued a request that was too large. That's all we know."
Deixo bem claro que esses limites não representam exatamente os limites do GET, pois tem outros fatores envolvidos, mas dão uma boa idéia.
A RFC 9110 de 2022, "HTTP Semantics", seção "5.4. Field Limits" não especifica nenhum requisito para o comprimento do URI (sequência de caracteres digitados na barra de endereços, aquilo que chamam erroneamente de URL).
Está bem claro que o tamanho do URI e, por conseguinte, da Request-URI, é limitado pelo navegador e/ou pelo servidor web utilizado.
Para fins de informação, na RFC 9110 na seção "18.3. Status Code Registration" (link nas referências) tem todos os códigos 1XX, 2XX, 3XX, 4XX e 5XX.