Summary
- RFC 6265 описывает оборот состояния: сервер отправляет
Set-Cookie, браузер возвращает подходящие пары имени и значения вCookieпри следующих запросах. Спецификация просит серверы использовать меньше cookie и делать их компактнее. - RFC 6585 ввёл в апреле 2012 года код 431 для слишком большого набора заголовков или одного чрезмерного поля. Уменьшенный запрос можно повторить; ответ 431 запрещено сохранять в кэше.
- HTTP/2 и HTTP/3 по-прежнему позволяют серверу отклонить блок полей или раздел заголовков, который он не готов обрабатывать.
Посылка вернулась отправителю
Покупатель открывает знакомый интернет-магазин. Браузер просит главную страницу и прикладывает Cookie: сеанс, настройки, метки нескольких экспериментов. Значения появились потому, что магазин ранее велел сохранить их. Шлюз или сервер на входе измеряет заголовки и обнаруживает превышение своего лимита. Вместо страницы приходит 431. Магазин упаковал посылку и закрыл дверь перед человеком, который принёс её обратно.
Порядок обмена закреплён в RFC 6265 от апреля 2011 года. Ответ Set-Cookie передаёт браузеру имя и значение. При последующих запросах браузер проверяет домен, путь и другие условия, после чего добавляет подходящие пары в Cookie. Атрибуты срока и области действия как пары не возвращаются, а имена со значениями возвращаются. Одно решение сервера превращается в многократно повторяемую нагрузку на все подходящие маршруты.
Раздел 6.1 показывает, как легко перепутать два разных лимита. Браузеры общего назначения должны поддерживать не менее 4096 байт на один cookie и не менее 50 cookie на домен. Там же серверам советуют выдавать как можно меньше компактных cookie: поле Cookie отправляется с каждым подходящим запросом. Число 4096 описывает минимальную ёмкость хранилища браузера. Оно не обещает, что любой шлюз или приложение примет запрос со всеми накопленными заголовками. Память на одной стороне может оказаться больше приёмного окна на другой.
Отказ получил отдельный код
В апреле 2012 года RFC 6585 добавил к HTTP четыре кода состояния. Код 431 Request Header Fields Too Large подходит для превышения размера всех полей вместе и для одного слишком большого поля. Во втором случае ответу следует назвать виновный заголовок. Запрос можно отправить снова после сокращения полей. Сохранять ответ 431 в кэше нельзя: отказ для одного набора заголовков не должен автоматически стать ответом для другого.
Код указывает на затор, но не задаёт единого числа байтов для всей сети и не выбирает cookie для удаления. При атаке сервер может предпочесть разрыв соединения ответу 431. Посетитель тогда увидит только неудачную загрузку. Отказ мог произойти на шлюзе ещё до того, как приложение получило запрос. Название конкретного компонента и его порог находятся в записи этого компонента.
Очистка всех cookie может облегчить запрос, одновременно закрыв сеанс и стерев настройки. Если сайт вновь выдаст те же значения, затор вернётся. Страница помощи, для доступа к которой нужен тот же громоздкий заголовок, останется за закрытой дверью. Оператор знает, какие значения он выпустил, как долго они живут, на какие пути распространяются и какое устройство первым проверяет размер.
Сжатая передача не расширила вход
В спецификациях 2022 года право отказа осталось. RFC 9113 позволяет серверу HTTP/2 ответить 431 на блок полей больше того, что он готов обработать. RFC 9114 описывает то же для раздела заголовков HTTP/3. Сжатие уменьшает представление в пути. Принимающей стороне всё равно предстоит работать с набором полей, для которого она установила бюджет.
При разборе сбоя графики могут спорить между собой: небольшой объём переданных по сети данных и слишком крупные заголовки после распаковки у шлюза. Следует также различать одно гигантское Cookie и сумму многих обычных полей. Заголовки авторизации занимают место в том же бюджете. Четыре RFC не приводят числа реальных инцидентов 431, вызванных cookie. Для конкретного случая нужны запись запроса в первой точке отказа и её журнал.
Исторический смысл кода проявляется в разделении полномочий. Браузер возвращает то, что ему поручили хранить. Инфраструктура охраняет входной предел. Приложение может вовсе не увидеть отвергнутый запрос. Клиент же видит один сайт. Код на квитанции объясняет причину возврата; пересмотреть упаковку способен прежде всего отправитель.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров





