Установить максимальную длину URL в Jetty

Я посмотрел и нашел ответ для некоторых людей, имеющих проблему с URL-адресом запроса GET, превышающим максимальную длину в Jetty, состоит в том, чтобы установить значение headerBufferSize в файле jetty.xml, как в этом руководстве по устранению неполадок Solr и в этом.

Однако мне трудно понять, как размер буфера заголовка связан с длиной URL запроса? Если настройка headerBufferSize увеличивает ограничение длины URL-адреса запроса, что соответствует значению в 6 КБ для headerBufferSize максимальной длине URL-адреса запроса? Причина, по которой я спрашиваю, потому что максимальная длина URL, налагаемая большинством браузеров, составляет около 2000 символов, как в разделе Какова максимальная длина URL в разных браузерах? и единица headerBufferSize находится в байтах.

1 ответ

Решение

В типичном POST-запросе вы увидите следующее...

POST /to/my/path HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
Host: https://my.machine.com
Content-Length: 10

Action=Add

Разбивая это:

  • Строки POST через Content-Length являются заголовками запроса.
    • POST В терминологии HTTP эта строка называется строкой запроса и содержит метод (POST) + abs_path (/to/my/path) + версия http (HTTP/1.1).
    • Content-Type - дает нам знать, как содержимое тела форматируется / кодируется.
    • Host - позволяет серверу узнать, к какому хосту обращались (в основном, для настройки виртуального хоста)
    • Content-Length - дает нам знать, что есть 10 байтов содержимого тела
  • Action=Add это содержание тела POST.

В его основе находятся 2 части запроса или ответа: заголовки и содержимое тела.

Когда вы устанавливаете headerBufferSize Вы устанавливаете максимальный верхний предел для содержимого заголовка (не содержимого тела).

Существует ряд злоупотреблений / уязвимостей, которые присутствуют, когда у вас неограниченный размер заголовка, начиная от злоупотребления потреблением памяти, до преднамеренных коллизий хэш-карт, приводящих к чрезмерному использованию ЦП. Ограничение размеров буфера заголовка ограничивает объем таких проблем. (эти уязвимости не являются уникальными для Jetty, но существуют для всех веб-серверов)

Если вы выходите за эти пределы, вам следует оценить, как вы используете solr (например, неправильно использовать GET, когда вы должны использовать POST), так как увеличение headerBufferSize также откроет вас для различных известных веб-уязвимостей.

Обновление: 24 октября 2013 г.

См. Другой ответ, связанный с тем, какова максимальная длина URL

Другие вопросы по тегам