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

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

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

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

Ответы

Ответ 1

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

Ответ 2

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

Вот итог:

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

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

Ответ 3

Для Apache я нашел эту "Ограничения сервера для Apache Security" , в которой перечислены эти директивы:

  # 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

Ответ 4

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

Ответ 5

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

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

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

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

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