Максимум на значениях заголовка http? - PullRequest
285 голосов
/ 26 марта 2009

Существует ли допустимый максимально допустимый размер для заголовков HTTP? Если так, то, что это? Если нет, то является ли это чем-то специфичным для сервера или является общепринятым стандартом, разрешающим заголовки любого размера?

Ответы [ 4 ]

281 голосов
/ 26 марта 2009

Нет, HTTP не определяет никаких ограничений. Однако большинство веб-серверов ограничивают размер принимаемых ими заголовков. Например, в ограничение Apache по умолчанию равно 8 КБ, в IIS - 16 КБ . Сервер вернет ошибку 413 Entity Too Large, если размер заголовков превысит этот предел.

Смежный вопрос: Насколько большой может получить строка агента пользователя?

203 голосов
/ 24 декабря 2011

Как сказано выше в vartec, спецификация HTTP не определяет ограничение, однако многие серверы устанавливают это по умолчанию. Это означает, что на практике нижний предел составляет 8K . Для большинства серверов это ограничение применяется к сумме строки запроса и полям заголовка ALL (поэтому файлы cookie должны быть короткими).

Стоит отметить, что nginx по умолчанию использует системный размер страницы, который в большинстве систем составляет 4 КБ. Вы можете проверить с помощью этой крошечной программы:

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.

4 голосов
/ 17 июля 2016

HTTP не устанавливает предопределенное ограничение на длину каждого заголовка. поле или на длину заголовка раздела в целом, как описано в разделе 2.5. Различные специальные ограничения для отдельного заголовка Длина поля находятся на практике, часто в зависимости от конкретной семантика поля.

Значения заголовка HTTP ограничены реализациями сервера. Спецификация Http не ограничивает размер заголовка.

Сервер, который получает поле заголовка запроса или набор полей, больше, чем он хочет обработать, ДОЛЖЕН ответить соответствующим 4хх (Ошибка клиента) код состояния. Игнорирование таких полей заголовка увеличить уязвимость сервера для запроса атак контрабанды (Раздел 9.5).

Большинство серверов вернет 413 Entity Too Large или соответствующую ошибку 4xx, когда это произойдет.

Клиент МОЖЕТ отбросить или усечь полученные поля заголовка, которые больше, чем клиент желает обработать, если семантика поля так что пропущенные значения можно безопасно игнорировать без изменения структура сообщения или семантика ответа.

Размер заголовка HTTP без кэша защищает сервер от атак и может снизить его способность обслуживать органический трафик.

Источник

0 голосов
/ 05 февраля 2017

Я также обнаружил, что в некоторых случаях причиной 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...