Existe um limite prático comprimento cabeçalho HTTP?
-
11-09-2019 - |
Pergunta
Eu tenho uma aplicação web que adiciona informação contextual para XmlHttpRequest objetos usando o setRequestHeader API. Eu estou usando um nome personalizado cabeçalho (por exemplo, X-Foo) e um href="http://www.json.org/" rel="noreferrer"> JSON valor estruturado Existe um limite de tamanho prático para o valor do cabeçalho? Se o meu JSON fica truncado, torna-se unparseable. Estou mais preocupado com limites no Apache 2, Tomcat 6 e IIS 7. Eu fiz uma pesquisa no Google para http header limite de comprimento , mas muitos dos resultados parece datado. Existem algumas observações relevantes na Como grande pode uma string user agent começar? , mas não tão específico quanto eu gostaria. Editar:
Eu só corri em toda esta questão semelhante -? máxima em valores cabeçalho HTTP
Solução
Sim, mas os limites são configuráveis ??e dependentes de plataforma. Por exemplo, Tomcat tem um limite padrão de 8K. Eu acredito que o IIS 6, não tenho certeza sobre o IIS 7, tem um limite de 16K. Corri para este quando utilizar a autenticação integrada do Windows para vários sites. Acontece que o meu token de segurança era muito grande quando codificado no cabeçalho. Felizmente, estes são configuráveis. Configurações do Registro para IIS pode ser encontrada no http://support.microsoft.com/kb/820129 . Eu acredito que as configurações-chave para a mudança são MaxFieldLength (por tamanho do cabeçalho) e MaxRequestBytes (tamanho total do pedido).
Outras dicas
Apesar de cada software de servidor web tem algumas limitações, há uma diferença se há um limite para o HTTP pedido de linha mais cabeçalho campos ou para cada campo de cabeçalho.
Aqui está um resumo:
Portanto, para concluir: Para ser aceito por todos os servidores web acima, um pedido de linha mais cabeçalho campos do pedido não deve exceder 8190 Bytes . Este também é o limite para cada campos de cabeçalho (efetivamente até menos).
Para o Apache, eu achei isso limita Servidor para artigo Apache Segurança que lista essas diretivas:
# allow up to 100 headers in a request
LimitRequestFields 100
# each header may be up to 8190 bytes long
LimitRequestFieldsize 8190
Para Nginx, a large_client_header_buffers directiva de HttpCoreModule controla o seguinte:
A mais longa linha de cabeçalho do pedido também não devem ter mais do que o tamanho de um tampão, caso contrário, o cliente recebe o erro "pedido Bad" (400).
Por padrão, o tamanho de um buffer é igual ao tamanho da página, dependendo da plataforma esta seja 4K ou 8K
Enquanto você pode configurar o servidor, é improvável que você realmente pode configurar todo o caminho através de firewalls, balanceadores de carga e proxies. Mantendo o pequeno tamanho do cabeçalho mantém problemas de distância.
O Flash Media Server 4.5 tem um limite de tamanho do cabeçalho padrão muito curto o que pode causar o servidor para simplesmente não respondem, sobretudo em circunstâncias onde há uma carga de cookie moderado.
No arquivo Flash Media Server Adaptor.xml, o
MaxHeaderLineLength
elemento determina o tamanho do cabeçalho HTTP o servidor pode manipular. O valor padrão paraMaxHeaderLineLength
é de 1024 bytes. alguns navegadores enviar um cabeçalho maior do que 1024 bytes. Neste cenário, o Apache envia apoiar uma resposta vazio. Para corrigir esse problema, configureMaxHeaderLineLength
de 8192.. Nota: Por padrão, o cabeçalho HTTP Apache limite de tamanho é de 8 KB (8190 bytes mais um retorno de carro)
Pondo isso aqui no caso do limite de tamanho do cabeçalho em Flash Media Server morde alguém.