O tamanho de um campo de cabeçalho de solicitação excede o limite do servidor devido a muitos valores de If-None-Match

8

Aqui está um caso interessante de um cliente recebendo o erro "400 Bad Request" e aparentemente incapaz de visualizar uma página inicial drupal hospedada no Ubuntu 12.04.3 LTS usando Apache / 2.2.22:

Solicitação incorreta
Seu navegador enviou uma solicitação que este servidor não conseguiu entender.
O tamanho de um campo de cabeçalho de solicitação excede o limite do servidor.

Saída de farejamento de pacotes:

...
T 2013/09/02 15:23:10.458167 ###.###.###.###:40027 -> ###.###.###.###:80 [A]
GET / HTTP/1.0.
If-None-Match: "1363160742-0", "1363165573-1", "1363175854-1", "1363175854-0", "1363179616-0", "1363181811-0", "1363239319-1", "1363255903-0", "1363259282-0", "1363263398-1", "1363274564-0", "1363329642-0", "1363332613-1", "1363333851-0", "1363599826-0", "1363678909-0", "1363684227-1", "1363699732-0", "1363755181-0", "1363765691-1", "1363767178-0", "1363780208-0", "1363787589-0", "1363795259-1", "1363852409-1", "1363863225-1", "1363928115-0", "1363951793-0", "1363951793-1", "1364133610-1", "1364187608-1", "1364187608-0", "1364203083-0", "1364208174-0", "1364214930-0", "1364219815-0", "1364274441-1", "1364280930-0", "1364280930-1", "1364286055-1", "1364298840-0", "1364298840-1", "1364360674-0", "1364364356-1", "1364381508-0", "1364385520-1", "1364460734-0", "1364882595-1", "1364903271-0", "1364967946-0", "1364967946-1", "1364981713-0", "1364985142-1", "1364992835-1", "1365061578-0", "1365065290-1", "1365076128-0", "1365141088-1", "1365167701-0", "1365171024-0", "1365402404-1", "1365402404-0", "1365411731-1", "1365416882-0", "1365476715-0", "1365487578-0", "1365488880-1", "1365503922-1", "1365514224-1", "1365579101-0", "1365580320-0", "1365582817-0", "1365584926-0", "1365589524-0", "1365608307-0", "1365649987-0", "1365682295-0", "1365685083-0", "1365770532-1", "1365770532-0", "1365844566-0", "1365996619-1", "1366093719-1", "1366093719-0", "1366115408-0", "1366180275-1", "1366186431-0", "1366196476-0", "13662669
...

Nesta fase, não tenho 100% de certeza se está limitado apenas a um cliente específico, mas o erro foi relatado por um usuário com a seguinte cadeia de caracteres de agente de usuário:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.7

Agora, permanece a pergunta: o que fazer? É um problema no servidor ou apenas um cliente que se comporta mal?

inetpro
fonte
Esta não é uma pergunta do Ubuntu. Dê uma olhada nos logs do Apache e use-os para obter ajuda entre a comunidade especializada.
Luís de Sousa
Meu pensamento era que poderia ser um problema de padrão do Ubuntu.
inetpro 3/09/13
1
Estamos falando de um servidor Web rodando no Ubuntu - portanto, não é um tópico em si. Como o @ LuísdeSousa sugeriu, veja /var/log/apache2/error.log, para descobrir qual limite foi violado.
guntbert
@ LuísdeSousa Nós suportamos todas as partes do Ubuntu Server aqui. Por que isso não seria uma pergunta do Ubuntu?
Eliah Kagan
@guntbert a parte interessante é que nem a solicitação nem o erro real são registrados nos logs do apache. Ele é registrado no proxy reverso squid e eu estou supondo que o proxy é realmente a causa
inetpro

Respostas:

11

Você encontrou o problema. Alguns agentes de usuário e algumas solicitações ficam grandes demais para os padrões do servidor da web. Parece um problema bobo, mas continua acontecendo comigo nginx. Normalmente, quando existem nomes e envios de cookies idiotas acontecendo ... De qualquer forma ...

A solução é apenas aumentar o limite de solicitações. Você pode fazer isso globalmente ou apenas para o seu site com a LimitRequestFieldSizediretiva :

LimitRequestFieldSize 32768

Isso é um limite de 32 KB (acima do padrão de 8 KB).

Oli
fonte
Era isso que eu estava pensando, mas não tinha certeza do tamanho recomendado. Obrigado!
inetpro 03/09
1
Aumentar LimitRequestFieldSizepara 32768não ajudou.
inetpro 03/09
@inetpro Você reiniciou o Apache? E está em um contexto suficientemente alto? Isso não funcionará em um arquivo .htaccess.
Oli
1
Você colocou a entrada no host virtual baseado em primeiro nome definido ou em outro? A documentação diz: "Quando a hospedagem virtual baseada em nome é usada, o valor dessa diretiva é obtido do host virtual padrão (listado pela primeira vez) para o NameVirtualHost para o qual a conexão foi mapeada.". Parece que você está melhor fazendo isso na configuração global. O problema de fazer isso em um host virtual é que o próprio cabeçalho da solicitação contém o nome do host virtual necessário.
Robie Basak
2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈ Ꭲ☕