HTTP要求の送信時にTCP接続がすでに確立されている場合、IPアドレスとポートは暗黙的に認識されます。TCP接続はIP +ポートです。では、なぜHost
ヘッダーが必要なのでしょうか。これは、TCP接続に含まれるIPアドレスに複数のホストがマップされている場合にのみ必要ですか?
HTTP要求の送信時にTCP接続がすでに確立されている場合、IPアドレスとポートは暗黙的に認識されます。TCP接続はIP +ポートです。では、なぜHost
ヘッダーが必要なのでしょうか。これは、TCP接続に含まれるIPアドレスに複数のホストがマップされている場合にのみ必要ですか?
回答:
host
ヘッダーは、Webサーバ伝え仮想ホストが(設定している場合)を使用するが。複数のエイリアス(=ドメインとワイルドカードドメイン)を使用して、同じ仮想ホストを持つこともできます。この場合でも、アドレス指定された異なるドメインに基づいて異なる動作を提供したい場合は、Webアプリでそのヘッダーを手動で読み取る可能性があります。これが可能になるのは、Webサーバーで1つの vhostをデフォルトのホストに設定できるからです(私が間違っていない場合は、そうする必要があります)。このデフォルトのvhostは、host
ヘッダーが構成済みのどの仮想ホストとも一致しない場合に使用されます。
つまり、あなたはそれを正しく理解しますが、「複数のホスト」は多少誤解を招く可能性があります。ホスト(アドレス指定されたマシン)は同じですが、実際にIPアドレスに解決されるのは、参照される異なるドメイン名(サブドメインを含む)です。ホスト名として(ただしホストではない!)。
質問の一部ではありませんが、おもしろい事実:この仕様は、クライアントがアドレス指定したドメインに対応する証明書をWebサーバーが配信する必要があるため、初期の段階でSSLの問題を引き起こしました。ただし、どの証明書を使用するかを知るために、Webサーバーはアドレス指定されたホスト名を事前に知っている必要があります。ただし、クライアントはその情報を暗号化されたチャネル経由でのみ送信するため(つまり、証明書が既に送信された後)、サーバーはデフォルトのホストを参照したと想定する必要がありました。つまり、IPアドレス/ポートの組み合わせごとにSSLで保護されたドメインが1つあります。
これはサーバー名表示で克服されました。ただし、サーバー名が再びプレーンテキストで転送されるようになるため、プライバシーが一部侵害されます。そのため、すべての中間者は、接続しようとしているホスト名を知ることになります。
Webサーバーはサーバー名表示からホスト名を認識しますがhost
、サーバー名表示情報はTLSハンドシェイク内でのみ使用されるため、ヘッダーは廃止されていません。安全でない接続では、サーバー名の表示はまったくないため、host
ヘッダーは引き続き有効です(必要です)。
もう1つのおもしろい事実:ほとんどすべてのWebサーバー(すべてではないにしても)は、host
ヘッダーが1つだけ含まれていない場合、デフォルトのvhostのみが構成されているため省略できても、httpリクエストを拒否します。その手段HTTP-(GET-)要求に必要な情報を最小含む最初の行であるMETHOD
RESOURCE
とPROTOCOL VERSION
し、少なくともhost
このような、-header。
GET /someresource.html HTTP/1.1
Host: www.example.com
ホストヘッダーのMDNドキュメントでは、実際には次のように表現しています。
ホストヘッダーフィールドは、すべてのHTTP / 1.1要求メッセージで送信する必要があります。400(Bad Request)ステータスコードは、Hostヘッダーフィールドがない、または複数のHTTP / 1.1リクエストメッセージに送信されます。
Darrel Millerが述べたように、完全な仕様はRFC7230にあります。
by the book
)構成されていないことを意味しますか?
default
検索で見つかった単語の近くでしたOtherwise, the authority component is assigned the default name configured for the server
virtual host
私の検索で見つかった3つのオカレンスはすべてにあります。あなたの検索は他の何かを見つけたようです。Appendix A. HTTP Version History
HTTPヘッダーの意味と目的を理解しようとするときは、常に信頼できるソースに行くことをお勧めします。
リクエストの「Host」ヘッダーフィールドは
、ターゲットURIからのホストとポートの情報
を提供
し、単一のIPアドレスで複数のホスト名のリクエストを処理しながら、起点サーバーがリソースを区別できるようにします。
vhost
をvirtual host
持つ3つの近い出現と、default
ほぼポートについての12 だけが見つかりませんでした