Существует ли практическое ограничение длины заголовка HTTP?
У меня есть веб-приложение, которое добавляет контекстную информацию XmlHttpRequest объекты с помощью setRequestHeader API-интерфейс. Я использую пользовательское имя заголовка (например, X-Foo) и в формате JSON структурированные значения. Он не является частью строки запроса URL или тела POST, потому что это метаинформация о запросе.
существует ли практический предел размера для значения заголовка? Если мой JSON усекается, он становится непростительным. Я очень обеспокоен. с ограничениями в Apache 2, Tomcat 6 и IIS 7. Я сделал поиск Google для ограничение длины заголовка http, но многие результаты кажутся устаревшими. Есть некоторые соответствующие комментарии в насколько большой может получить строка агента пользователя? но не так конкретно, как хотелось бы.
Edit: Я только что столкнулся с этим подобным вопросом -максимальное значение заголовка http?
5 ответов
да, но ограничения настраиваются и зависят от платформы. Например, Tomcat имеет ограничение по умолчанию 8K. Я считаю, что IIS 6, не уверен в IIS 7, имеет предел 16K. Я столкнулся с этим при использовании встроенной проверки подлинности windows для нескольких веб-сайтов. Оказывается, мой маркер безопасности был слишком большим, когда закодирован в заголовок. К счастью, они настраиваются. Параметры реестра для IIS можно найти в http://support.microsoft.com/kb/820129. Я считаю, что ключевыми настройками для изменения являются MaxFieldLength (на размер заголовка) и MaxRequestBytes (общий размер запроса).
хотя каждое программное обеспечение веб-сервера имеет некоторые ограничения, есть разница, есть ли ограничение для строка HTTP-запроса плюс поля заголовка или для каждого поля заголовка.
вот резюме:
Итак, чтобы заключить: быть принятым всеми веб-серверами выше, a строка запроса запроса плюс поля заголовка не должны превышать 8190 байт. Это также ограничение для каждого поля заголовка (фактически еще меньше).
для 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
хотя вы можете настроить сервер, маловероятно, что вы действительно можете настроить весь путь через брандмауэры, балансировщики нагрузки и прокси. Сохранение размера заголовка небольшим сохраняет проблемы.
Flash Media Server 4.5 имеет очень короткий предел длины заголовка по умолчанию, который может заставить сервер просто не отвечать, особенно в обстоятельствах, когда есть умеренная загрузка файлов cookie.
в адаптере Flash Media Server.xml-файл,
MaxHeaderLineLength
элемент определяет размер HTTP-заголовка, который может обрабатывать сервер. Значение по умолчанию дляMaxHeaderLineLength
- это 1024 байта. Некоторые обозреватели отправить заголовок размером более 1024 байт. В этом случае Apache отправляет ответ был пустым. Чтобы устранить эту проблему, настройтеMaxHeaderLineLength
до 8192.примечание: по умолчанию ограничение размера заголовка HTTP Apache составляет 8 КБ (8190 байт плюс возврат каретки).
поместите это здесь, если ограничение размера заголовка на Flash Медиа-сервер кусает кого-то другого.