Ответ
HTTP 421 Misdirected Request означает, что запрос был направлен на сервер, который не может дать ответ для указанного в заголовке Host имени.
Основная причина: Сервер, получивший запрос, не настроен для обработки запросов к указанному в заголовке Host домену. Это особенно актуально для серверов, обслуживающих несколько доменов.
Пример сценария:
- Клиент отправляет запрос
GET /api/dataна IP-адрес сервера с заголовкомHost: api.example.com. - Сервер на этом IP настроен отвечать только для домена
example.com, но не дляapi.example.com. - Сервер отвечает:
HTTP/1.1 421 Misdirected Request.
Контекст: Этот статус-код был введен в спецификации HTTP/2 для безопасного мультиплексирования запросов, когда один TCP-соединение используется для нескольких доменов.
Ответ 18+ 🔞
А, слушай, вот эта штука — 421-й код! Это ж классика, когда сервер такой: «Э, стопэ, дружок-пирожок, ты не туда попал, нахрен».
Представь себе: есть у тебя один здоровый сервер, а на нём висит, ну, дохуя разных сайтов. Как в общаге — одна дверь, а комнат — пиздец сколько. И вот ты стучишься в эту дверь и кричишь: «Откройте, это Ваня из 505-й!». А тебе из-за двери отвечают: «Бля, Ваня, ты охуел? Мы тут в 404-й живём, твоей 505-й тут нет, иди нахуй». Вот это и есть 421 Misdirected Request.
По-простому: Твой запрос пришёл по правильному IP-адресу, но в заголовке Host ты указал такое доменное имя, за которое этот конкретный сервер нихуя не отвечает. Он тебя не знает, он тебя не ждал.
Пример, чтобы вообще всё стало ясно:
Допустим, у сервера IP 93.184.216.34. Он заточен только под сайт example.com.
А ты, такой умный, шлёшь ему запрос:
GET /api/data HTTP/1.1
Host: api.example.com <-- Вот эта хуйня!
Сервер смотрит на этот Host, чешет репу и думает: «api.example.com? А я, блядь, кто? Я — example.com! Я про эту твою апишку нихуя не знаю!». И в ответ плюёт тебе в лицо статусом:
HTTP/1.1 421 Misdirected Request
Сообщение: «Иди, дружок, ищи другой сервер, который за эту твою апишку отвечает. Ты не по адресу».
Откуда ноги растут? Эта фигня особенно актуальна для HTTP/2 и HTTP/3. Там, чтобы экономить, могут через одно TCP-соединение гонять запросы к разным доменам. И вот если соединение установлено с одним сервером, а ты через него пытаешься достучаться до другого домена, который он не обслуживает — он тебе как раз этим 421-м и намекнёт: «Э, сабака сука, не хитри, иди своим путём».
Короче, если увидел 421 — значит, твой клиент или прокси лажанулись с выбором сервера для конкретного доменного имени. Надо переслать запрос туда, где его ждут.