Существует ли ограничение длины заголовка 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 укусит кого-то другого.