HTTPQUERY
日本語

421 Misdirected Request

使い方

421 Misdirected Request エラーは、サーバーがレスポンスを生成できないことを示します。このステータスは接続の再利用の結果として送信され、サーバーがクライアントに接続を再利用してほしくない場合に使われます。これを受けて、クライアントは別の接続でリクエストを再送信しようとします。

これは、代替サービス(Alt-Svc)が選択された場合にも発生します。

このステータスがプロキシによって生成されることはありません。

SEO への影響

Google は、HTTP/2 での Googlebot によるクロールを拒否するために 421 を返すことを推奨しています。Googlebot は HTTP/1.1 と HTTP/2 の両方でクロールします。Googlebot からの HTTP/2 リクエストに 421 で応答すると、そのサイトに対する HTTP/2 でのクロールが停止します。421 を返すページはインデックスされず、以前にインデックスされていた URL がこのコードを返すようになると検索結果から削除されます。

例

クライアントがリソースを要求し、このホスト向けではない接続でリクエストが到着したため、サーバーは 421 Misdirected Request で応答します。

リクエスト

GET /tech-news HTTP/2
Host: example.com

レスポンス

HTTP/2 421 Misdirected Request

対処方法

意図したオリジンへの新しい専用の接続でリクエストを再試行します。ブラウザやクライアントは、既存の HTTP/2 の多重化接続を再利用するのではなく、新しい TCP/TLS セッションを開きます。

サーバー側では、TLS 証明書がそのサーバーの扱うすべてのホスト名をカバーしていることを検証します。SNI(Server Name Indication)の値と Host ヘッダーの不一致が最も一般的なきっかけです。

nginx が HTTPS 経由で Apache のバックエンドへリバースプロキシする場合、Apache が正しいホスト名を認識できるよう SNI の転送を有効にします。

Apache では、各仮想ホストに一致する ServerName と有効な証明書があることを確認します。近年の Apache リリースでは SNI のチェックが厳格化されており、SNI のホスト名と Host ヘッダーが矛盾するリクエストは拒否されます。

CDN やロードバランサーがオリジンへのトラフィックを再暗号化する場合は、上流の TLS ハンドシェイクが正しい SNI 値を送っていることを確認します。Cloudflare などのサービスでは、オリジン証明書が配信するすべてのホスト名を列挙している必要があります。

複数のドメインが IP を共有しながら異なる証明書を使っている場合は、サーバーで HTTP/2 の接続の結合(coalescing)を無効にします。各ドメインには個別の接続が必要です。

コードリファレンス

.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