Rozmiar pola nagłówka żądania przekracza limit serwera z powodu wielu wartości If-None-Match

8

Oto interesujący przypadek, w którym klient otrzymuje błąd „400 złych żądań” i najwyraźniej nie może wyświetlić strony głównej drupal hostowanej na Ubuntu 12.04.3 LTS przy użyciu Apache / 2.2.22:

Złe żądanie
Twoja przeglądarka wysłała żądanie, którego ten serwer nie mógł zrozumieć.
Rozmiar pola nagłówka żądania przekracza limit serwera.

Wyjście wąchania pakietów:

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

Na tym etapie nie jestem w 100% pewien, czy ogranicza się on tylko do konkretnego klienta, ale błąd został zgłoszony przez użytkownika o następującym ciągu agenta użytkownika:

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

Pozostaje pytanie, co należy zrobić, czy jest to problem z serwerem, czy po prostu źle zachowujący się klient?

inetpro
źródło
To nie jest pytanie Ubuntu. Przejrzyj dzienniki Apache i użyj ich, aby uzyskać pomoc wśród wyspecjalizowanej społeczności.
Luís de Sousa,
Myślałem, że może to być problem z domyślnymi Ubuntu.
inetpro,
1
Mówimy o serwerze internetowym działającym na Ubuntu - więc nie jest on per se tematyczny. Jak sugerował @ LuísdeSousa, spójrz na /var/log/apache2/error.log, aby dowiedzieć się, jaki limit został naruszony.
guntbert
@ LuísdeSousa Obsługujemy tutaj wszystkie części Ubuntu Server. Dlaczego nie byłoby to pytanie Ubuntu?
Eliah Kagan,
@guntbert interesującą częścią jest to, że ani żądanie, ani faktyczny błąd nie są nigdy rejestrowane w logach Apache. Jest zalogowany w odwrotnym proxy kałamarnicy i domyślam się, że przyczyną jest proxy
inetpro

Odpowiedzi:

11

Znalazłeś problem. Niektóre aplikacje klienckie i niektóre żądania stają się zbyt duże, aby mogły zostać ustawione domyślne ustawienia serwera WWW. Wydaje się, że to głupi problem, ale ciągle mi się to zdarza nginx. Zwykle, gdy są głupie nazwy plików cookie i przesyłane pliki ... W każdym razie ...

Rozwiązaniem jest po prostu zwiększenie limitu żądań. Można to zrobić globalnie lub tylko dla witryny z tej LimitRequestFieldSizedyrektywy :

LimitRequestFieldSize 32768

To limit 32 KB (w porównaniu z domyślnym 8 KB).

Oli
źródło
Tak myślałem, ale nie byłem pewien co do zalecanego rozmiaru. Dzięki!
inetpro
1
Zwiększenie LimitRequestFieldSizedo 32768nie pomogło.
inetpro
@inetpro Czy zrestartowałeś Apache? I czy ma wystarczająco wysoki kontekst? To nie zadziała w pliku .htaccess.
Oli
1
Czy wpisałeś wpis w zdefiniowanym wirtualnym hoście opartym na imieniu, czy w innym? Dokumentacja mówi: „Kiedy jest używana nazwa oparte wirtualny hosting, wartość tej dyrektywie pochodzi z domyślnego (pierwszy na liście) wirtualnego hosta dla NameVirtualHost połączenie zostało odwzorowane na.”. Wygląda na to, że lepiej jest to zrobić w konfiguracji globalnej. Problem z robieniem tego na wirtualnym hoście polega na tym, że sam nagłówek żądania zawiera nazwę wymaganego wirtualnego hosta.
Robie Basak,
2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈ Ꭲ☕