La dimensione di un campo di intestazione della richiesta supera il limite del server a causa di molti valori If-None-Match


8

Ecco un caso interessante di un client che riceve l'errore "400 Bad Request" e apparentemente incapace di visualizzare una home page di drupal ospitata su Ubuntu 12.04.3 LTS usando Apache / 2.2.22:

Richiesta errata
Il browser ha inviato una richiesta che questo server non è in grado di comprendere.
La dimensione di un campo di intestazione della richiesta supera il limite del server.

Uscita di sniffing dei pacchetti:

...
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
...

In questa fase non sono sicuro al 100% se si tratta solo di un client specifico, ma l'errore è stato segnalato da un utente con la seguente stringa agente utente:

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

Ora la domanda rimane cosa fare, è un problema del server o solo un client che si comporta male?


Questa non è una domanda Ubuntu. Dai un'occhiata ai registri di Apache e usali per ottenere aiuto nella comunità specializzata.
Luís de Sousa,

Pensavo che potesse trattarsi di un problema di default di Ubuntu.
inetpro,

1
Stiamo parlando di un server web in esecuzione su Ubuntu - quindi non è di per sé fuori tema. Come suggerito da @ LuísdeSousa, guarda /var/log/apache2/error.log, per scoprire quale limite è stato violato.
Guntbert,

@ LuísdeSousa Supportiamo qui tutte le parti di Ubuntu Server. Perché questa non è una domanda Ubuntu?
Eliah Kagan,

@guntbert la parte interessante è che né la richiesta né l'errore reale sono mai registrati nei log di Apache. È registrato nel proxy inverso dei calamari e suppongo che il proxy sia effettivamente la causa
inetpro

Risposte:


11

Hai trovato il problema. Alcuni programmi utente e alcune richieste diventano troppo grandi per i valori predefiniti del web server. Sembra un problema sciocco da affrontare ma continua a succedermi nginx. Di solito quando ci sono nomi di cookie sciocchi e caricamenti in corso ... Comunque ...

La soluzione è semplicemente superare il limite di richiesta. Puoi farlo a livello globale o solo per il tuo sito con la LimitRequestFieldSizedirettiva :

LimitRequestFieldSize 32768

È un limite di 32 KB (rispetto al valore predefinito di 8 KB).


Questo è quello che stavo pensando ma non ero sicuro delle dimensioni consigliate. Grazie!
inetpro,

1
L'aumento LimitRequestFieldSizedi 32768non ha aiutato.
inetpro,

@inetpro Hai riavviato Apache? Ed è in un contesto abbastanza alto? Questo non funzionerà in un file .htaccess.
Oli

1
Hai inserito la voce nell'host virtuale basato sul nome definito o in un altro? La documentazione dice: "Quando si utilizza l'hosting virtuale basato sul nome, il valore per questa direttiva viene preso dall'host virtuale predefinito (primo elencato) per NameVirtualHost a cui è stata mappata la connessione.". Sembra che tu stia meglio facendo questo nella configurazione globale. Il problema nel farlo in un host virtuale è che è l'intestazione della richiesta stessa a contenere il nome dell'host virtuale richiesto.
Robie Basak,

2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈ Ꭲ☕
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.