Есть ли практическое ограничение длины заголовка HTTP?

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

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

Изменить: я только что столкнулся с этим похожим вопросом - https://stackoverflow.com/questions/686217/maximum-on-http-header-values


person Kevin Hakanson    schedule 08.07.2009    source источник
comment
Интересный подход. Какие метаданные вы отправляете таким образом?   -  person Marcus Downing    schedule 08.07.2009
comment
Также обратите внимание, что это может вызвать проблемы, если пользователь подключается через прокси-сервер.   -  person carpii    schedule 14.08.2012


Ответы (5)


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

person tvanfosson    schedule 08.07.2009
comment
Я нашел эту ссылку в MSDN, чтобы установить ограничения заголовка IIS для определенного заголовка - iis.net/ConfigReference/system.webServer/security/ - person Kevin Hakanson; 08.07.2009
comment
Согласно статье базы знаний, эти поля реестра работают для IIS6 и IIS7. - person Cheeso; 03.10.2011
comment
Хотя вы можете настроить сервер, маловероятно, что вы действительно сможете настроить его полностью через брандмауэры, балансировщики нагрузки и прокси. Сохранение небольшого размера заголовка избавляет от проблем. - person Lothar; 05.03.2014

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

Вот краткое изложение:

  • Apache 1.3, 2.0, 2.2, 2,3: 8190 байт (для каждого поля заголовка)
  • IIS:
    • 4.0: 2097152 Bytes (for the request line plus header fields)
    • 5.0: 131072 байта, 16384 байта с Windows 2000 Service Pack 4 (для строки запроса плюс поля заголовка)
    • 6.0: 16384 байта (для каждого поля заголовка)
  • Tomcat:
    • 5.5.x/6.0.x: 49152 Bytes (for the request line plus header fields)
    • 7.0.x : 8190 байт (для строки запроса плюс поля заголовка)

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

person Gumbo    schedule 28.05.2011

Для 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 контролирует следующее:

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

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

person Kevin Hakanson    schedule 09.07.2009

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

person Lothar    schedule 05.03.2014

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 кого-то укусит.

person artlung    schedule 05.10.2012