HTTPQUERY
Русский

414 URI Too Long

Применение

При получении сообщения об ошибке 414 URI Too Long клиент понимает, что сервер ожидает более короткий HTTP-путь или адрес. Хотя спецификация не устанавливает никаких требований к длине, на практике браузеры ограничивают её размер, чтобы предотвратить определённые типы атак.

Серверы, обратные прокси и фреймворки вводят собственные ограничения на длину URI. Распространённые значения по умолчанию находятся в диапазоне от 4 КБ до 8 КБ, хотя ни одна спецификация не определяет максимум.

Ответ 414 URI Too Long по умолчанию кэшируется.

Влияние на SEO

Поисковые системы вроде Google не будут индексировать URL со статусом ответа 414. Ранее проиндексированные URL будут удалены из результатов поиска.

Пример

Клиент запрашивает ресурс, используя URI длиннее, чем допускает сервер.

Запрос

GET /<...a_long_URI...> HTTP/1.1
Host: example.com

Ответ

HTTP/1.1 414 URI Too Long

Как исправить

Чаще всего причина — GET-запрос со слишком большим числом параметров строки запроса или с чрезмерно длинными значениями, закодированными в URL. Эту ошибку также вызывает цикл перенаправлений или неверно настроенное правило переписывания, добавляющее параметры на каждом круге.

Исправления на стороне клиента:

nginx: увеличьте large_client_header_buffers, чтобы разрешить более длинные строки запроса. Директива принимает два значения: количество буферов и размер буфера, например large_client_header_buffers 4 32k. Перезапустите nginx, чтобы изменения вступили в силу.

Apache: задайте в httpd.conf большее значение в байтах для LimitRequestLine. По умолчанию — 8190 байт. Для приложений с длинными URL часто применяют значения вплоть до 128000. После изменения перезапустите Apache.

IIS: отредактируйте maxUrl и maxQueryString в файле web.config в разделе system.webServer > security > requestFiltering > requestLimits. Значения по умолчанию — 4096 байт для длины URL и 2048 байт для строк запроса. Держите эти значения настолько малыми, насколько это практично. Большие лимиты на URL повышают подверженность атакам с внедрением кода.

Когда ошибка появляется в браузере, а не в API, иногда помогает очистка кэша браузера и cookie — особенно если устаревшие cookie раздувают размер заголовков запроса сверх серверных лимитов.

Примеры кода

.NET

HttpStatusCode.RequestUriTooLong

Rust

http::StatusCode::URI_TOO_LONG

Rails

:uri_too_long
:request_uri_too_long

Go

http.StatusRequestURITooLong

Symfony

Response::HTTP_REQUEST_URI_TOO_LONG

Python3.5+

http.HTTPStatus.REQUEST_URI_TOO_LONG

Java

java.net.HttpURLConnection.HTTP_REQ_TOO_LONG

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_REQUEST_URI_TOO_LONG

Angular

@angular/common/http/HttpStatusCode.UriTooLong