Die Größe eines Anforderungsheaderfelds überschreitet das Serverlimit aufgrund vieler If-None-Match-Werte

8

Hier ist ein interessanter Fall, in dem ein Client den Fehler "400 Bad Request" erhält und anscheinend nicht in der Lage ist, eine auf Ubuntu 12.04.3 LTS mit Apache / 2.2.22 gehostete Drupal-Homepage anzuzeigen:

Ungültige Anfrage
Ihr Browser hat eine Anfrage gesendet, die dieser Server nicht verstehen konnte.
Die Größe eines Anforderungsheaderfelds überschreitet das Serverlimit.

Paket-Sniffing-Ausgabe:

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

Zu diesem Zeitpunkt bin ich nicht 100% sicher, ob es nur auf einen bestimmten Client beschränkt ist, aber der Fehler wurde von einem Benutzer mit der folgenden Benutzeragentenzeichenfolge gemeldet:

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

Nun bleibt die Frage, was zu tun ist. Handelt es sich um ein Serverproblem oder nur um einen sich schlecht benehmenden Client?

inetpro
quelle
Dies ist keine Ubuntu-Frage. Schauen Sie sich die Apache-Protokolle an und nutzen Sie diese, um Hilfe bei der Fachgemeinschaft zu erhalten.
Luís de Sousa
Meine Gedanken waren, dass es sich möglicherweise um ein Ubuntu-Standardproblem handelt.
Inetpro
1
Wir sprechen von einem Webserver, der unter Ubuntu läuft - es ist also per se kein Off-Topic. Schauen Sie sich an /var/log/apache2/error.log, wie @ LuísdeSousa vorgeschlagen hat, um herauszufinden, welche Grenze verletzt wurde.
Guntbert
@ LuísdeSousa Wir unterstützen hier alle Teile von Ubuntu Server. Warum wäre das keine Ubuntu-Frage?
Eliah Kagan
@guntbert der interessante Teil ist, dass weder die Anfrage noch der eigentliche Fehler jemals in den Apache-Protokollen protokolliert wird. Es ist im Squid Reverse Proxy protokolliert und ich
vermute,

Antworten:

11

Sie haben das Problem gefunden. Einige Benutzeragenten und einige Anforderungen werden für die Standardeinstellungen des Webservers einfach zu groß. Es scheint ein dummes Problem zu sein, aber es passiert mir immer wieder nginx. Normalerweise, wenn dumme Cookie-Namen und Uploads stattfinden ... Wie auch immer ...

Die Lösung besteht darin, nur das Anforderungslimit zu überschreiten. Sie können dies global oder nur für Ihre Site mit der LimitRequestFieldSizeDirektive tun :

LimitRequestFieldSize 32768

Dies ist ein Limit von 32 KB (gegenüber dem Standardwert von 8 KB).

Oli
quelle
Das habe ich mir gedacht, aber ich war mir nicht sicher über die empfohlene Größe. Vielen Dank!
Inetpro
1
Das Erhöhen LimitRequestFieldSizeauf 32768hat nicht geholfen.
Inetpro
@inetpro Hast du Apache neu gestartet? Und ist der Kontext hoch genug? Dies funktioniert in einer .htaccess-Datei nicht.
Oli
1
Haben Sie den Eintrag in den definierten virtuellen Namen mit Vornamen oder in einen anderen eingefügt? In der Dokumentation heißt es: "Wenn namenbasiertes virtuelles Hosting verwendet wird, wird der Wert für diese Anweisung vom virtuellen Standardhost (zuerst aufgeführt) für den NameVirtualHost übernommen, dem die Verbindung zugeordnet wurde." Es sieht so aus, als ob Sie dies in der globalen Konfiguration besser tun sollten. Das Problem bei der Ausführung auf einem virtuellen Host besteht darin, dass der Anforderungsheader selbst den Namen des erforderlichen virtuellen Hosts enthält.
Robie Basak
2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈ Ꭲ☕