Яка максимальна довжина URL-адреси в Tomcat?


43

І чи це налаштовується? Чи можу я встановити Tomcat так, щоб URL-адреса, скажімо, 200K парам запитів, успішно проходила до вміщеного сервлета?

Так, я знаю, що ви повинні використовувати POST, коли у вас є багато даних; це менш приємний варіант у цьому конкретному випадку. Вміщена програма (пошукова система) очікує отримання GET запиту для здійснення пошуку.

Відповіді:


60

Ви можете змінити запис Tomcat / conf / server.xml на HTTP / 1.1-з'єднувачі та додати maxHttpHeaderSize = "65536", щоб збільшити з максимального значення 8K або близько 64K. Я думаю, що ви могли б збільшити цю кількість настільки високо, наскільки потрібно, але на сьогоднішній день вистачає на мої потреби, тому я не пробував цього.

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />

3
Дуже корисно, вирішив мою проблему з Solr. Здається, ми подряпинили ліміт 8192 за замовчуванням у server.xmlконфігурації, не помічаючи, і раптом вдарили по ньому. Хвороблива ґутча: нічого про це ніде не було записано, з'єднання мовчки перестали (я вже не пам'ятаю статусу HTTP). Раніше я наткнувся на документацію на tomcat.apache.org/tomcat-5.5-doc/config/http.html , однак я не пов'язував це maxHttpHeaderSizeім'я, ані його опис, щоб бути пов'язаним із самими параметрами запиту GET запиту.
відмітка

Ми також просто потрапили на ту саму межу в Solr, нічого, окрім порожньої білої сторінки ... :( The maxHttpHeaderSize зробив трюк.
user85116

Я думаю, що maxHttpHeaderSize = "100000" неможливий, він повинен бути помножений на 1024. Я змінив maxHttpHeaderSize = "1048576", який є 1024 * 1024, і він все ще не працює.

3
Прийнята відповідь, "maxHttpHeaderSize =" 65536 " не працює. Вона працювала раніше через помилку в Tomcat. URL / URI не має нічого спільного з заголовками HTTP.
Fuad Efendi

1
@FuadEfendi, який зараз максимальний розмір?
mjaggard

5

RFC2616 не застосовує тривалість запиту HTTP GET , оскільки Microsoft повідомляє про свою сторінку підтримки максимальної довжини IE .

Отже, максимальна довжина GET - це проблема, пов'язана з клієнтом (браузером) . Якщо вашою програмою користуються люди, яких ви можете змусити користуватися певним браузером, ви можете просто знайти довжину підтримки цього браузера.

У кожному випадку я пропоную переглянути сторінку Wikypedia щодо тих проблем, пов’язаних із браузером у рядку Запиту (частина запиту, що приводить параметри для додатків на сервері, та, що в кінцевому підсумку є "?", Зрештою присутня у запиті.

Звичайно, можливо, tomcat поставить обмеження і на стороні сервера. RFC каже:

Сервери ОБОВ'ЯЗКОВО матимуть змогу обробляти URI будь-якого ресурсу, який вони обслуговують, і ОБОВ'ЯЗКОВО мати можливість обробляти URI без обмеженої довжини, якщо вони надають форми на основі GET, які могли б генерувати такі URI. Сервер ДОЛЖЕН би повернути статус 414 (Request-URI Too Long), якщо URI довший, ніж може обробляти сервер (див. Розділ 10.4.15).

тож ви можете легко перевірити, чи є Tomcat обмеження, і дізнатися, що це за межа, просто використовуючи різні запити, починаючи з дуже довгого, який дає помилку, і знижується на половину. Потім скористайтеся методом бісекції, щоб швидко знайти точне значення.


Альберт, я знав, що Tomcat має обмеження поза межами коробки (щось на кшталт 8K); Мені було цікаво, чи існує межа, яку навіть конфігурація не зможе подолати.
Майкл Гундлах

2

Для роз'єму AJP потрібно налаштувати packetSizeатрибут:

<Connector port="8009" 
    protocol="AJP/1.3" 
    packetSize="65536" />

1
Якщо ви використовуєте mod_proxy, вам також потрібно встановити ProxyIOBufferSize 65536 ваш httpd config.
самогубство

1

Ви можете змінити конфігурацію на сервері Tomcat (.. \ Tomcat 6.0 \ conf \ server.xml)

<Connector port = "8983" maxHttpHeaderSize = "100000" протокол = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />


Ви можете покращити цю відповідь, відформатувавши свій код та пояснивши, чому він відповідає на питання ОП.
james.garriss
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.