何が起きたのか?
421 は「あなたが届けた手紙、ここの教室宛じゃないですよ」というサインです。 教室で言えば、提出物を持って隣の教室に入ってしまい「うちはそのクラスじゃないよ、向かいの部屋だよ」と返される——そんな場面に近いです。サーバーは存在しますが、そのリクエストを処理する責任を持っていません。
HTTP/2 や HTTP/3 では、同じ接続を複数のドメインで使い回すことができます。その仕組みが噛み合わないと、本来は別のサーバーが応えるべきリクエストが、たまたま開いている接続を通じて来てしまう。サーバーはそれに気付いて 421 で返します。
黒板からのひとこと
学校に同じ名前の先生が二人いると、生徒は誤って違う先生の教室に質問を持ち込むことがあります。「同じ名字でも、僕じゃなくて隣の教室の先生のほうだよ」と教えてもらえれば、生徒は素直に出直せます。
421 もそれと同じで、サーバーは「この接続では応えられないけれど、新しく接続し直せば届くはずだよ」と教えてくれています。クライアントは別の接続でやり直せば、たいてい解決します。
解決への歩み
大丈夫、次はこうしてみよう:
- 接続を張り直して再送:HTTP クライアントが既存接続を使い回さないよう設定
- Host / :authority ヘッダの値を確認:意図した宛先を正しく指定しているか
- CDN / LB のルーティングを確認:振り分けルールと TLS 証明書の対象ドメインの整合
- 仮想ホスト設定を確認(管理者向け):SNI、ALPN、ホストごとのバックエンド指定を順に点検
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 421 Misdirected Request
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>421 Misdirected Request</h1></body></html>