ヘッダ - Shinichi0713/security_specialist GitHub Wiki

Hostヘッダ

HTTP リクエストの Host ヘッダフィールドを示す。 RFC7230をもとにしています。

HTTPリクエストヘッダの一部で、クライアントがサーバーにアクセスする際に、対象のホスト名とポート番号を通知するためのフィールドです。例えば、Host: www.example.comやHost: www.example.com:80のように指定されます。

このヘッダは、サーバーがどのホスト名に対するリクエストなのかを識別するために重要です。一つのサーバーが複数のホスト名やドメインを持つ場合、Hostヘッダを使ってリクエストを適切に振り分けることができます。この仕組みは「仮想ホスト」と呼ばれます。

HTTP/1.1以降では、Hostヘッダの指定が必須となっており、欠けている場合は400 Bad Requestエラーが返されます。

HTTP では、クライアントサーバーモデルに基づき、クライアントがサーバーへリソースを要求(リクエスト)し、サーバーはそれに応答(レスポンス)を返します。
クライアントやサーバーが発するものはメッセージと呼ばれます。メッセージは

  • 0個以上のヘッダフィールド、
  • ヘッダフィールドの終わりを示す空の行、
  • オプション(あってもなくてもよい)としてメッセージボディ

HTTP リクエストメッセージとレスポンスメッセージ

   Client request:

     GET /hello.txt HTTP/1.1
     User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
     Host: www.example.com // ←ここが Hostヘッダフィールド
     Accept-Language: en, mi


   Server response:

     HTTP/1.1 200 OK
     Date: Mon, 27 Jul 2009 12:28:53 GMT
     Server: Apache
     Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
     ETag: "34aa387-d-1568eb00"
     Accept-Ranges: bytes
     Content-Length: 51
     Vary: Accept-Encoding
     Content-Type: text/plain

     Hello World! My payload includes a trailing CRLF.

HTTP リクエストの Host ヘッダフィールドは、アクセスしたい URI とポートの情報をもちます。

Host: www.example.com
もしくは
Host: www.example.com:80

ホストとオリジンの関係

オリジン=スキーム+ホスト名+ポート番号の組合せ
ドメイン=ホスト名のみ

  • オリジン
    オリジンはHTTP通信の中で重要な単位で、スキーム(httpかhttps)、ホスト名、そしてポート番号の組み合わせを指すよ。例えば、https://example.com:443がひとつのオリジン。
  • ドメイン
    ドメインはその中の「ホスト名」の部分、つまりexample.comを指している。