web-dev-qa-db-ja.com

Hostヘッダーの不良または欠落を示すHTTPステータスコード

SNIまたはHTTPホストヘッダーを介して不正なホスト名を送信する(またはまったく送信しない)クライアントに使用するのに適切なHTTPステータスコードはありますか?

古い質問 は、そのようなリクエストが最初にどのようにしてなぜ発生するか、およびApacheでそれらを技術的に処理する方法に対処します。ただし、応答のステータスコードの選択については扱いません。

過去に、ステータスコード502およびエラーメッセージが生成された理由を説明するhtmlページを送信するHTTPプロキシを実装しました。 502を使用する根拠は、プロキシが適切なバックエンドを見つけられなかったことを意味する構成の誤りが原因であると主に考えていたはずです。実際には、単に完全に偽のホスト名を確認するほうがはるかに頻繁であることがわかりました。

より適切で、このIPアドレスのサーバーがSNIやホストヘッダーを介して送信された値を認識しないことをクライアントに明確に通知する別のステータスコードはありますか?

6
kasperd

RFC 6066は、SNI経由で送信されたホスト名がHTTPホストヘッダーと一致しない場合、特定のHTTPエラーを指定または推奨していません。 SNIホスト名がサービスを提供するホスト名でない場合、サーバーはTLSハンドシェイクを中止することを行いますセクション から:

サーバーがClientHello拡張を理解したがサーバー名を認識しない場合、サーバーは2つのアクションのいずれかを実行する必要があります:致命的なレベルのunrecognized_name(112)アラートを送信してハンドシェイクを中止するか、ハンドシェイクを続行します。

このような不正なリクエストはTLSハンドシェイクを通過し、HTTPで拒否される必要があるため、HTTP応答コードが必要です。存在するすべてのもののうち、1つだけが本当に状況に適合します。

6.5.1。400不正なリクエスト

400(Bad Request)ステータスコードは、クライアントエラーであると認識されている何か(たとえば、不正なリクエスト構文、無効なリクエストメッセージフレーミング、または不正なリクエストルーティング)のために、サーバーがリクエストを処理できない、または処理しないことを示します。

これは、実際には、RFC 7230で指定されている応答です。 From セクション5.4 ホストヘッダーの説明:

サーバーは、ホストヘッダーフィールドがないHTTP/1.1リクエストメッセージ、および複数のホストヘッダーフィールドまたは無効なフィールド値を持つホストヘッダーフィールドを含むリクエストメッセージに対して、400(不良リクエスト)ステータスコードで応答する必要があります。 。

これには502を使用してagainstを強くお勧めします。そのセマンティクスは、server側で何かが間違っていること、および後で試行した場合にリクエストが成功することを示しています。

14
Michael Hampton