3

3 つの仮想ホストが提供される Web サーバーを考えてみましょう。

  • mysite.com
  • myothersite.com
  • imnotcreative.com

ここで、サーバーが次の生のリクエスト メッセージを受信するとします (コードの書式設定により終了\r\nシーケンスが削除されます)。

GET / HTTP/1.1
Host: nothostedhere.com

RFC 2616 には、現在のサーバーに存在しないホスト名の要求に応答する方法についてのガイダンスがありません (おそらく見逃したのでしょうか?)。たとえば、Apache は、その構成で定義された最初の仮想ホストを単に「プライマリ ホスト」として使用し、クライアントがそのホストを要求したふりをします。明らかに、これは応答を返すよりも堅牢で400 Bad Requestあり、クライアントが常に何らかの表現を見ることが保証されます。

だから私の質問は...

400HTTP/1.1 プロトコルを使用しているときに、クライアントが存在しないホストを要求した場合に、(または他のエラー コード) で応答することを思いとどまらせるために、「堅牢性と正確性」の議論以外に理由を提供できますか?


すべての HTTP/1.1 リクエストは、RFC 2616 に従ってヘッダーを指定しなければならないHost:ことに注意してください。HTTP/1.0 リクエストの場合、唯一の実際のオプションは、「プライマリ」ホストの結果を提供することです。この質問は、特に HTTP/1.1 プロトコル リクエストに対応しています。

4

2 に答える 2

5

このシナリオでは、400 は実際には意味的に正しい応答コードではありません。

10.4.1 400 不正な要求

構文が正しくないため、サーバーは要求を理解できませんでした。

これは起こったことではありません。リクエストは構文的に有効であり、サーバーがルーティング フェーズに到達するまでに (ヘッダーの値を調べているとき)、これは既に決定されています。

ここでの正しい応答コードは 403 です。

10.4.4 403 禁止

サーバーは要求を理解しましたが、要求を満たすことを拒否しています。

これは、何が起こったかをより正確に説明しています。サーバーは、要求を満たすことができないため、要求を満たすことを拒否しています。より詳細なエラー メッセージをメッセージ エンティティで提供できます。

要求を満たすのに適したドキュメントが見つからなかったので、404 が受け入れられる/正しいという議論もありますが、個人的には、404 が次のように述べているため、これは正しいオプションではないと思います。

10.4.5 404が見つかりません

サーバーは Request-URI に一致するものを見つけられませんでした

これは、Request-URI の問題を明確に示しています。ルーティング フェーズのこの初期段階では、おそらく URI には関心がありません。適切なドキュメントがあるかどうかを判断する前に、最初に要求をホストに割り当てる必要があるからです。 URI パスを処理します。

HTTP/1.1 ではHost:ヘッダーは必須です。クライアントがバージョン 1.1 を使用していて、ヘッダーを提供していないと述べている場合、Host:400 が間違いなく正しい応答コードです。クライアントがバージョン 1.0 を使用していると述べている場合、ホスト ヘッダーを提供する必要はなく、これは適切に処理する必要があります。このシナリオは、認識されていないドメインと同じ状況になります。

実際、このイベントには 2 つのオプションがあります。要求をデフォルトの仮想ホスト コンテナーにルーティングするか、エラーで応答します。上で概説したように、エラーで応答する場合、エラーは 403 である必要があると思います。

于 2013-02-05T12:46:36.117 に答える
2

これは、サービスを利用すると予想されるクライアントのタイプと、提供するサービスのタイプに大きく依存すると思います。

  • 一般的な Web サイトの場合:
    リクエストがユーザーのブラウザーからトリガーされると想定しても安全Host:です。Apache がこのケースを処理する方法 (つまり、最初の適切な VHost へのフォールバック) はまったく問題ないとさえ言えます。結局のところ、お客様を怖がらせたくありません。

  • API/RPC タイプのサービスの場合:
    これはまったく別のケースです。あなたのサービスを利用する人は誰でも、あなたの仕様に従うことを期待すべきです。したがって、これらが消費者に有効なHost:ヘッダーを渡すことを要求し、消費者がそうしない場合、妥当な応答を返す必要があります(400 Bad Request私には問題ないようです)。

于 2013-02-05T11:10:02.783 に答える