web-dev-qa-db-ja.com

http Hostヘッダーとは何ですか

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

76
VladimirLenin

Hostヘッダーは、使用する仮想ホスト(セットアップされている場合)をWebサーバーに通知します。複数のエイリアス(=ドメインとワイルドカードドメイン)を使用して、同じ仮想ホストを持つこともできます。この場合、アドレス指定された異なるドメインに基づいて異なる動作を提供する場合、Webアプリケーションでそのヘッダーを手動で読み取る可能性があります。これは、Webサーバーでonevhostをデフォルトのホストに設定できるため(そして、私が間違っていなければならない場合)に設定できるためです。このデフォルトのvhostは、Hostヘッダーが構成済みの仮想ホストのいずれとも一致しない場合に使用されます。

つまり、「複数のホスト」と言うのは多少誤解を招くかもしれませんが、正しく理解できます。ホスト(アドレス指定されたマシン)は同じで、実際にIPアドレスに解決されるものは異なりますdomain names(サブドメインを含む)は、hostnamesとも呼ばれます(ホストではありません!)。

質問の一部ではありませんが、面白い事実:Webサーバーはクライアントが対処したドメインに対応する証明書を配信する必要があるため、この仕様は初期のSSLで問題を引き起こしました。ただし、どの証明書を使用するかを知るために、Webサーバーは事前にアドレス指定されたホスト名を知っている必要があります。ただし、クライアントはその情報を暗号化されたチャネルのみで送信するため(つまり、証明書が既に送信された後)、サーバーはデフォルトのホストを参照したと想定する必要がありました。つまり、IPアドレス/ポートの組み合わせごとに1つのSSLで保護されたドメインを意味していました。

これは Server Name Indication ;で克服されました。ただし、サーバー名がプレーンテキストで再び転送されるようになり、プライバシーが侵害されるため、すべての中間者はwhich hostname接続しようとしています。

Webサーバーはサーバー名表示からホスト名を知っていますが、サーバー名表示情報はTLSハンドシェイク内でのみ使用されるため、Hostヘッダーは廃止されません。セキュリティで保護されていない接続では、サーバー名の表示がまったくないため、Hostヘッダーは引き続き有効です(必要です)。

別の面白い事実:ほとんどのWebサーバー(すべてではない場合)は、デフォルトのvhostのみが構成されているため省略できる場合でも、Hostヘッダーが1つだけ含まれていない場合、http-requestを拒否します。つまり、http get-)requestに最低限必要な情報は、METHODRESOURCEおよび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が述べたように、完全な仕様は RFC72 にあります。

103
Psi

HTTPヘッダーの意味と目的を理解しようとするときは、常に権威ある情報源に行くことをお勧めします。

リクエストの "Host"ヘッダフィールドは、ホストとポートを提供します。
ターゲットURIからの情報。オリジンサーバが
複数の要求を処理しながらリソースを区別する
単一のIPアドレス上のホスト名。

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

19
Darrel Miller

HTTP 1.1、Hostヘッダーは、IPアドレスとポート番号に加えて、Webドメイン、またはMicrosoftが呼んでいるアプリケーションサーバーを一意に識別するために使用できる3番目の情報です。たとえば、URL www.example.comのHostヘッダー名はwww.example.comです。 HTML 3.0以降のブラウザはHTTP 1.1をサポートしています。ブラウザには、ブラウザがサーバに送信するリクエストヘッダのlocationフィールドに指定したHostヘッダ名が含まれています。要求ヘッダーにHostヘッダー名を指定しないと、ルートWebドメインがデフォルトのWebサーバーとして機能します。

0
Kiara Lima