Respostas:
Não, o HTTP não define nenhum limite. No entanto, a maioria dos servidores da Web limita o tamanho dos cabeçalhos que eles aceitam. Por exemplo, no limite padrão do Apache é 8KB, no IIS é 16K . O servidor retornará um 413 Entity Too Large
erro se o tamanho dos cabeçalhos exceder esse limite.
Pergunta relacionada: Qual o tamanho de uma sequência de agentes do usuário?
Como a vartec diz acima, a especificação HTTP não define um limite, no entanto, muitos servidores o definem por padrão. Isso significa, na prática, o limite inferior é 8K . Para a maioria dos servidores, esse limite se aplica à soma da linha de solicitação e de TODOS os campos de cabeçalho (mantenha seus cookies curtos).
Vale ressaltar que o nginx usa o tamanho da página do sistema por padrão, que é de 4K na maioria dos sistemas. Você pode verificar com este pequeno programa:
pagesize.c:
#include <unistd.h>
#include <stdio.h>
int main() {
int pageSize = getpagesize();
printf("Page size on your system = %i bytes\n", pageSize);
return 0;
}
Compile com, em gcc -o pagesize pagesize.c
seguida, execute ./pagesize
. Meu servidor ubuntu de Linode obedientemente me informa que a resposta é 4k.
LimitRequestLine
e LimitRequestFieldSize
aplica-se a cada linha de cabeçalho HTTP indivually ... não a "soma de ..."
O HTTP não coloca um limite predefinido no comprimento de cada campo de cabeçalho ou no comprimento da seção do cabeçalho como um todo, conforme descrito na Seção 2.5. Várias limitações ad hoc no comprimento do campo do cabeçalho individual são encontradas na prática, geralmente dependendo da semântica do campo específico.
Os valores do cabeçalho HTTP são restritos pelas implementações do servidor. A especificação de HTTP não restringe o tamanho do cabeçalho.
Um servidor que recebe um campo de cabeçalho de solicitação ou conjunto de campos maior do que deseja processar DEVE responder com um código de status apropriado 4xx (Erro do cliente). Ignorar esses campos de cabeçalho aumentaria a vulnerabilidade do servidor para solicitar ataques de contrabando (Seção 9.5).
A maioria dos servidores retornará 413 Entity Too Large
ou erro 4xx apropriado quando isso acontecer.
Um cliente PODE descartar ou truncar os campos de cabeçalho recebidos que são maiores do que o cliente deseja processar se a semântica do campo for tal que os valores descartados possam ser ignorados com segurança sem alterar o enquadramento da mensagem ou a semântica da resposta.
O tamanho do cabeçalho HTTP sem limite mantém o servidor exposto a ataques e pode reduzir sua capacidade de atender tráfego orgânico.
Também descobri que, em alguns casos, o motivo de 502/400 no caso de muitos cabeçalhos pode ser devido a um grande número de cabeçalhos, sem levar em consideração o tamanho. dos documentos
tune.http.maxhdr Define o número máximo de cabeçalhos em uma solicitação. Quando uma solicitação vem com um número de cabeçalhos maior que esse valor (incluindo a primeira linha), ela é rejeitada com o código de status "400 Solicitação incorreta". Da mesma forma, respostas muito grandes são bloqueadas com "502 Bad Gateway". O valor padrão é 101, o que é suficiente para todos os usos, considerando que o servidor Apache amplamente implantado usa o mesmo limite. Pode ser útil aumentar ainda mais esse limite para permitir temporariamente que um aplicativo com bugs funcione no momento em que for corrigido. Lembre-se de que cada novo cabeçalho consome 32 bits de memória para cada sessão, portanto, não exagere muito nesse limite.
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr