Существует ли практическое ограничение длины HTTP-заголовка?

У меня есть веб-приложение, которое добавляет контекстную информацию к объектам XmlHttpRequest с помощью API setRequestHeader. Я использую пользовательское имя заголовка (например, X-Foo) и структурированное значение JSON. Он не является частью URL QueryString или тела POST, потому что это метаинформация о запросе.

Есть ли практический предел размера для значения заголовка? Если мой JSON обрезается, он становится неразборчивым. Больше всего меня беспокоят ограничения в Apache 2, Tomcat 6 и IIS 7. Я выполнил поиск в Google для ограничения длины заголовка http, но многие результаты кажутся устаревшими. Есть несколько соответствующих комментариев в разделе "Какова большая длина строки пользовательского агента"? но не так конкретно, как хотелось бы.

Изменить: я только что столкнулся с подобным вопросом - Максимум на значения заголовка http?

5 ответов

Решение

Да, но ограничения настраиваются и зависят от платформы. Например, Tomcat имеет ограничение по умолчанию 8K. Я считаю, что IIS 6, не уверенный в IIS 7, имеет ограничение в 16K. Я столкнулся с этим при использовании встроенной проверки подлинности Windows для нескольких веб-сайтов. Оказывается, мой токен безопасности был слишком большим при кодировании в заголовок. К счастью, это настраивается. Настройки реестра для IIS можно найти по адресу http://support.microsoft.com/kb/820129. Я считаю, что ключевыми настройками для изменения являются MaxFieldLength (на размер заголовка) и MaxRequestBytes (общий размер запроса).

Хотя у каждого программного обеспечения веб-сервера есть свои ограничения, есть разница, есть ли ограничение для строки HTTP-запроса плюс поля заголовка или для каждого поля заголовка.

Вот резюме:

  • Apache 1.3, 2.0, 2.2, 2.3: 8190 байт (для каждого поля заголовка)
  • IIS:
    • 4.0: 2097152 байта (для строки запроса плюс поля заголовка)
    • 5.0: 131072 байта, 16384 байта в Windows 2000 с пакетом обновления 4 (для строки запроса плюс поля заголовка)
    • 6.0: 16384 байта (для каждого поля заголовка)
  • Кот:
    • 5.5.x/ 6.0.x: 49152 байта (для строки запроса плюс поля заголовка)
    • 7.0.x: 8190 байт (для строки запроса плюс поля заголовка)

Итак, сделаем вывод: чтобы быть принятыми всеми веб-серверами выше, строка запроса плюс поля заголовка не должны превышать 8190 байт. Это также предел для каждого поля заголовка (фактически даже меньше).

Для Apache я нашел статью " Ограничения сервера для безопасности Apache", в которой перечислены следующие директивы:

  # allow up to 100 headers in a request
  LimitRequestFields 100
  # each header may be up to 8190 bytes long
  LimitRequestFieldsize 8190

Для Nginx директива large_client_header_buffers из HttpCoreModule контролирует это:

Самая длинная строка заголовка запроса также должна быть не больше размера одного буфера, в противном случае клиент получит ошибку "Неверный запрос" (400).

По умолчанию размер одного буфера равен размеру страницы, в зависимости от платформы это 4K или 8K

Несмотря на то, что вы можете настроить сервер, маловероятно, что вы действительно сможете настроить весь путь через брандмауэры, балансировщики нагрузки и прокси. Небольшой размер заголовка позволяет избежать проблем.

Flash Media Server 4.5 имеет очень короткое ограничение длины заголовка по умолчанию, которое может привести к тому, что сервер просто не отвечает, особенно в условиях умеренной загрузки файлов cookie.

См. Настройка и администрирование Flash Media Server 4.5: Настройка сервера Настройка HTTP-сервера Apache: укажите максимальную длину строки заголовка HTTP.

В файле Flash Media Server Adaptor.xml MaxHeaderLineLength Элемент определяет размер HTTP-заголовка, который может обработать сервер. Значение по умолчанию для MaxHeaderLineLength 1024 байта. Некоторые браузеры отправляют заголовок размером более 1024 байтов. В этом случае Apache отправляет обратно пустой ответ. Чтобы решить эту проблему, настройте MaxHeaderLineLength до 8192.

Примечание. По умолчанию ограничение размера HTTP-заголовка Apache составляет 8 КБ (8190 байт плюс возврат каретки).

Поместите это здесь на случай, если ограничение размера заголовка на Flash Media Server укусит кого-то другого.

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