Ukuran bidang tajuk permintaan melebihi batas server karena banyak nilai Jika-Tidak-Cocok

8

Berikut ini kasus menarik dari klien yang mendapatkan kesalahan "400 Bad Request" dan tampaknya tidak dapat melihat halaman beranda drupal yang dihosting di Ubuntu 12.04.3 LTS menggunakan Apache / 2.2.22:

Permintaan Buruk
Browser Anda mengirim permintaan yang tidak dapat dimengerti server ini.
Ukuran bidang tajuk permintaan melebihi batas server.

Output paket sniffing:

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

Pada tahap ini saya tidak 100% yakin apakah itu hanya terbatas pada klien tertentu tetapi kesalahan dilaporkan oleh pengguna dengan string agen pengguna berikut:

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

Sekarang pertanyaannya tetap apa yang harus dilakukan, apakah itu masalah server atau hanya klien yang nakal?

inetpro
sumber
Ini bukan pertanyaan Ubuntu. Lihatlah log Apache dan gunakan itu untuk mendapatkan bantuan di antara komunitas khusus.
Luís de Sousa
Pikiranku adalah bahwa itu mungkin masalah default Ubuntu.
inetpro
1
Kita berbicara tentang server web yang berjalan di Ubuntu - jadi itu bukan topik per-se. Seperti yang disarankan @ LuísdeSousa, lihat /var/log/apache2/error.log, untuk menemukan batas apa yang dilanggar.
guntbert
@ LuísdeSousa Kami mendukung semua bagian dari Server Ubuntu di sini. Mengapa ini bukan pertanyaan Ubuntu?
Eliah Kagan
@ Guntbert bagian yang menarik adalah bahwa baik permintaan bukan kesalahan yang sebenarnya pernah login di log apache. Ini login di proxy reverse squid dan saya menduga bahwa proxy sebenarnya penyebabnya
inetpro

Jawaban:

11

Anda telah menemukan masalahnya. Beberapa agen pengguna dan beberapa permintaan terlalu besar untuk standar server web. Sepertinya masalah konyol untuk ditemui tetapi itu terus terjadi pada saya nginx. Biasanya ketika ada nama cookie konyol dan unggahan sedang terjadi ... Lagi pula ...

Solusinya adalah hanya menabrak batas permintaan. Anda dapat melakukan ini secara global atau hanya untuk situs Anda dengan yang LimitRequestFieldSizedirektif :

LimitRequestFieldSize 32768

Itu adalah batas 32KB (naik dari standar 8KB).

Oli
sumber
Itulah yang saya pikirkan tetapi saya tidak yakin tentang ukuran yang disarankan. Terima kasih!
inetpro
1
Meningkat LimitRequestFieldSizemenjadi 32768tidak membantu.
inetpro
@inetpro Apakah Anda memulai ulang Apache? Dan apakah itu pada konteks yang cukup tinggi? Ini tidak akan berfungsi dalam file .htaccess.
Oli
1
Apakah Anda menempatkan entri di virtual host berbasis nama depan yang ditentukan, atau yang lain? The dokumentasi mengatakan: "Ketika nama-berbasis virtual hosting digunakan, nilai untuk direktif ini diambil dari default (pertama terdaftar) virtual host untuk NameVirtualHost koneksi yang dipetakan ke.". Sepertinya Anda lebih baik melakukan ini di konfigurasi global. Masalah dengan melakukannya di host virtual adalah bahwa header permintaan itu sendiri berisi nama host virtual yang diperlukan.
Robie Basak
2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈ Ꭲ☕