Максимально на значениях заголовка HTTP?
Есть ли допустимый максимальный разрешенный размер для заголовков HTTP? Если так, то, что это? Если нет, это что-то конкретное для сервера или является общепринятым стандартом, чтобы разрешать заголовки любого размера?
Ответы
Ответ 1
Нет, HTTP не определяет никаких ограничений. Однако большинство веб-серверов ограничивают размер заголовков, которые они принимают. Например, в ограничение по умолчанию для Apache составляет 8 КБ, в IIS it 16K. Сервер вернет ошибку 413 Entity Too Large
, если размер заголовков превышает этот предел.
Связанный вопрос: Насколько велика строка пользовательского агента?
Ответ 2
Как уже говорило vartec, спецификация HTTP не определяет ограничение, однако по многим серверам по умолчанию. Это означает, что, по сути, нижний предел 8K. Для большинства серверов этот предел применяется к сумме строки запроса и ВСЕХ полей заголовка (поэтому держите свои файлы cookie короткими).
Стоит отметить, что nginx использует размер системной страницы по умолчанию, что составляет 4K для большинства систем. Вы можете проверить эту крошечную программу:
pagesize.c:
#include <unistd.h>
#include <stdio.h>
int main() {
int pageSize = getpagesize();
printf("Page size on your system = %i bytes\n", pageSize);
return 0;
}
Скомпилируйте с помощью gcc -o pagesize pagesize.c
, затем запустите ./pagesize
. Мой сервер ubuntu из Linode послушно сообщает мне, что ответ 4k.
Ответ 3
HTTP не устанавливает предопределенный предел для длины каждого заголовка поле или по длине секции заголовка в целом, как описано в разделе 2.5. Различные специальные ограничения для отдельного заголовка длина поля находится на практике, часто в зависимости от конкретного полевая семантика.
Значения заголовка HTTP ограничены реализацией сервера. Спецификация Http не ограничивает размер заголовка.
Сервер, который получает поле заголовка запроса или набор полей, больше, чем он хочет обрабатывать, ДОЛЖЕН отвечать соответствующим 4xx (Client Error). Игнорирование таких полей заголовка повысить уязвимость сервера для запроса атак на контрабанду (Раздел 9.5).
Большинство серверов вернут 413 Entity Too Large
или соответствующую ошибку 4xx, когда это произойдет.
Клиент МОЖЕТ отменить или усечь полученные поля заголовка, которые больше, чем клиент хочет обработать, если полевая семантика так что сброшенные значения могут быть безопасно проигнорированы без изменения семантика кадрирования сообщения или ответа.
Размер HTTP-заголовка без ссылки держит сервер открытым для атак и может снизить его способность обслуживать органический трафик.
Источник
Ответ 4
Я также обнаружил, что в некоторых случаях причина 502/400 в случае многих заголовков может быть из-за большого количества заголовков без учета размера.
из документов
tune.http.maxhdr Устанавливает максимальное количество заголовков в запросе. Когда запрос приходит с количество заголовков больше этого значения (включая первую строку), это отклонен с кодом статуса "400 Bad Request". Аналогично, слишком большие ответы заблокированы "502 Bad Gateway". Значение по умолчанию - 101, что достаточно для всех применений, учитывая, что широко используемый сервер Apache использует такой же предел. Может быть полезно нажать этот предел дальше, чтобы временно разрешить багги-приложение для работы к моменту его исправления. Имейте в виду, что каждый новый заголовок потребляет 32 бит памяти для каждой сессии, поэтому не нажимайте эту слишком высокий предел.
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr