431 Request Header Fields Too Large
Применение
Код состояния 431 Request Header Fields Too Large означает, что сервер отказывается обрабатывать HTTP-запрос, поскольку в HTTP-заголовках указано слишком много данных.
В зависимости от сервера речь идёт либо об общей длине всех HTTP-заголовков вместе, либо об отдельных заголовках. В любом случае клиент может удалить один или несколько HTTP-заголовков и повторить запрос. Одно из возможных решений для ограничения числа HTTP-заголовков — урезать или сократить передаваемые Cookie.
Влияние на SEO
Поисковые системы вроде Google не индексируют URL со статусом ответа 431. Ранее проиндексированные URL, возвращающие этот код состояния, будут удалены из результатов поиска.
Пример
Клиент запрашивает ресурс, и сервер отвечает 431 Request Header Fields Too Large, потому что сумма двух больших значений cookie превышает максимальный предел, установленный сервером для HTTP-заголовков.
Запрос
GET /tech-news HTTP/1.1
Host: example.com
Cookie: first_cookie=<very_long>; second_cookie=<long_again>
Ответ
HTTP/1.1 431 Request Header Fields Too Large
Content-Type: text/html
Content-Length: 183
<html>
<head>
<title>Request Headers Too Long</title>
</head>
<body>
<p>The request headers are too long.
Try retrying without cookies.</p>
</body>
</html>
Как исправить
Очистите Cookie для затронутого домена в браузере. Накопление cookie — самая частая причина. Сторонние скрипты, аналитические теги и маркетинговые пиксели устанавливают cookie при каждом посещении, и их суммарный размер в итоге превышает ограничение сервера. Сначала очистите cookie конкретного сайта, прежде чем полностью удалять все cookie браузера.
Сократите значения пользовательских заголовков, отправляемых с запросами. Длинные токены авторизации, разросшиеся заголовки X-Custom-* и URL-кодированные параметры запроса, встроенные в заголовки, — всё это увеличивает общий размер.
На стороне сервера увеличьте ограничения буфера заголовков:
Проведите аудит использования cookie по всему сайту. Ограничьте число cookie, устанавливаемых для домена, и используйте атрибуты SameSite, Path и Domain, чтобы cookie не распространялись на поддомены и пути, где они не нужны. Переносите данные сессии в серверное хранилище или localStorage, когда данные не обязаны передаваться с каждым запросом.
Повышение серверных ограничений выше 32 КБ создаёт риск отказа в обслуживании. Увеличивайте лимиты ровно настолько, чтобы вместить легитимный трафик, и сопровождайте это изменение мониторингом размера запросов.
Chrome и ошибки 431
Chrome показывает “Bad Request - Request Header Field Too Long” или “Bad message 431”, когда накопленные для домена cookie выводят заголовки запроса за пределы серверного ограничения. Очистка cookie конкретного сайта в настройках Chrome (Настройки > Конфиденциальность > Файлы cookie > Показать все данные сайтов) немедленно устраняет ошибку, не затрагивая другие сайты.
Примеры кода
.NET
HttpStatusCode.RequestHeaderFieldsTooLarge
Rust
http::StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE
Rails
:request_header_fields_too_large
Go
http.StatusRequestHeaderFieldsTooLarge
Symfony
Response::HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE
Python3.5+
http.HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_REQUEST_HEADER_FIELDS_TOO_LARGE
Angular
@angular/common/http/HttpStatusCode.RequestHeaderFieldsTooLarge