421 Misdirected Request
Применение
Ошибка 421 Misdirected Request указывает, что сервер не в состоянии сформировать ответ. Этот статус отправляется вследствие повторного использования соединения, когда сервер не хочет, чтобы клиенты повторно использовали соединения. В ответ клиент пытается повторно отправить запрос по другому соединению.
Это также происходит при выборе альтернативной службы (Alt-Svc).
Этот статус не генерируется прокси-серверами.
Влияние на SEO
Google рекомендует возвращать 421, чтобы отказаться от сканирования Googlebot по HTTP/2. Googlebot сканирует как по HTTP/1.1, так и по HTTP/2. Ответ 421 на запросы Googlebot по HTTP/2 прекращает сканирование сайта по HTTP/2. Страницы, возвращающие 421, не индексируются, а ранее проиндексированные URL, возвращающие этот код, удаляются из результатов поиска.
Пример
Клиент запрашивает ресурс, и сервер отвечает 421 Misdirected Request, потому что запрос пришёл по соединению, не предназначенному для этого хоста.
Запрос
GET /tech-news HTTP/2
Host: example.com
Ответ
HTTP/2 421 Misdirected Request
Как исправить
Повторите запрос по новому выделенному соединению с нужным источником. Браузер или клиент открывает свежую сессию TCP/TLS вместо повторного использования существующего мультиплексированного соединения HTTP/2.
На стороне сервера убедитесь, что TLS-сертификат охватывает каждое имя хоста, которое обслуживает сервер. Несовпадение между значением SNI (Server Name Indication) и заголовком Host — самая частая причина.
Когда nginx выступает обратным прокси к бэкенду Apache по HTTPS, включите передачу SNI, чтобы Apache видел правильное имя хоста:
В Apache убедитесь, что у каждого виртуального хоста есть соответствующий ServerName и действительный сертификат. Ужесточённые проверки SNI в недавних выпусках Apache отклоняют запросы, в которых имя хоста из SNI и заголовок Host противоречат друг другу.
Для CDN и балансировщиков нагрузки, заново шифрующих трафик к источнику, убедитесь, что при TLS-рукопожатии с вышестоящим узлом передаётся правильное значение SNI. Cloudflare и аналогичным службам нужно, чтобы сертификат источника перечислял все обслуживаемые имена хостов.
Отключите объединение соединений HTTP/2 на сервере, когда несколько доменов используют один IP, но разные сертификаты. Каждому домену нужно отдельное соединение.
Примеры кода
.NET
HttpStatusCode.MisdirectedRequest
Rust
http::StatusCode::MISDIRECTED_REQUEST
Rails
:misdirected_request
Go
http.StatusMisdirectedRequest
Symfony
Response::HTTP_MISDIRECTED_REQUEST
Python3.5+
http.HTTPStatus.MISDIRECTED_REQUEST
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MISDIRECTED_REQUEST
Angular
@angular/common/http/HttpStatusCode.MisdirectedRequest