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