httpホストヘッダーとは


120

HTTP要求の送信時にTCP接続がすでに確立されている場合、IPアドレスとポートは暗黙的に認識されます。TCP接続はIP +ポートです。では、なぜHostヘッダーが必要なのでしょうか。これは、TCP接続に含まれるIPアドレスに複数のホストがマップされている場合にのみ必要ですか?

回答:


140

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 RESOURCEPROTOCOL 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にあります。


いい答えだ。これは、ウェブサーバーで1つの仮想ホストをデフォルトのホストに設定できるためです(私が間違っていない場合は、これが可能です。このデフォルトの仮想ホストは、ホストヘッダーが構成済みの仮想ホストと一致しない場合に常に使用されます。ホスト。」RFC7230をチェックインしたかったのですが、フレーズに近くない意味vhostvirtual host持つ3つの近い出現と、defaultほぼポートについての12 だけが見つかりませんでした
Alexei Martianov

ホストのみについて:「そうでない場合、ホストヘッダーフィールドに空でないフィールド値が指定されている場合、機関コンポーネントはホストフィールド値と同じです。」-私と同じではない。それについてRFCで指摘するように教えてもらえますか?
Alexei Martianov

実際的な側面:一部のサーバーにヘッダーhost = domain nameでPOSTを送信し、200(ok)を取得します。変更されたホストヘッダーを送信し、404(見つかりません)を取得します。サーバーが適切に(完全にby the book)構成されていないことを意味しますか?
Alexei Martianov

コメントは編集できないため、2番目の引用はdefault検索で見つかった単語の近くでしたOtherwise, the authority component is assigned the default name configured for the server
Alexei Martianov '27

奇妙な。tools.ietf.org/html/rfc7230でのvirtual host私の検索で見つかった3つのオカレンスはすべてにあります。あなたの検索は他の何かを見つけたようです。Appendix A. HTTP Version History
Alexei Martianov

29

HTTPヘッダーの意味と目的を理解しようとするときは、常に信頼できるソースに行くことをお勧めします。

リクエストの「Host」ヘッダーフィールドは
、ターゲットURIからのホストとポートの情報
を提供
し、単一のIPアドレスで複数のホスト名のリクエストを処理しながら、起点サーバーがリソースを区別できるようにします。

https://tools.ietf.org/html/rfc7230#section-5.4

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.