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

StackOverflow https://stackoverflow.com/questions/1097651

Вопрос

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

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

Редактировать: Я только что наткнулся на этот похожий вопрос - Максимальное значение для http-заголовка?

Это было полезно?

Решение

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

Другие советы

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

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

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

Итак, в заключение:Чтобы быть принятым всеми вышеперечисленными веб-серверами, a строка запроса плюс поля заголовка запроса не должны превышать 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 коснется кого-то другого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top