Hostヘッダ(ホストヘッダ)とは | 意味や読み方など丁寧でわかりやすい用語解説
Hostヘッダ(ホストヘッダ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ホストヘッダ (ホストヘッダ)
英語表記
Host header (ホストヘッダー)
用語解説
Hostヘッダは、HTTPプロトコルにおいてクライアントがサーバーへリクエストを送信する際に含めるヘッダフィールドの一つである。その最も重要な役割は、クライアントが通信したい相手のサーバー名、すなわちホスト名(ドメイン名)を指定することにある。現代のWebシステムにおいて、このHostヘッダは不可欠な要素となっている。なぜなら、インターネット上では一つのIPアドレスを持つ一台のサーバーが、複数の異なるドメイン名のウェブサイトを同時に運用することが一般的だからである。この技術は「仮想ホスト」または「バーチャルホスト」と呼ばれる。例えば、www.example.comとwww.example.netという二つのウェブサイトが、同じIPアドレス192.0.2.1を持つサーバー上で動作している場合を考える。ユーザーがブラウザでwww.example.comにアクセスしようとすると、ブラウザはまずDNSサーバーに問い合わせて192.0.2.1というIPアドレスを取得する。そして、そのIPアドレスを持つサーバーに対してHTTPリクエストを送信する。しかし、このリクエストだけでは、サーバーはクライアントがwww.example.comとwww.example.netのどちらのウェブサイトを要求しているのか判断できない。そこでHostヘッダが役立つ。ブラウザはHTTPリクエストの中に「Host: www.example.com」という情報を付与する。リクエストを受け取ったWebサーバーは、このHostヘッダの値を確認し、「www.example.com」向けのコンテンツをクライアントに返す。もしwww.example.netへのアクセスであれば、「Host: www.example.net」というヘッダが送られ、サーバーはそれに対応するコンテンツを返す。このように、Hostヘッダはサーバー側でリクエストを適切に振り分け、正しいウェブサイトのコンテンツを提供するための宛先情報として機能する。
HostヘッダはHTTP/1.1仕様から必須項目として定められた。それ以前のHTTP/1.0では任意であったが、仮想ホスト技術の普及に伴い、Webインフラストラクチャを効率的に運用するために不可欠となり、必須化されるに至った。Hostヘッダの書式は単純で、「Host: <hostname>[:<port>]」という形式で構成される。<hostname>には、www.example.comのような完全修飾ドメイン名(FQDN)が指定される。<port>はオプションであり、リクエスト先のポート番号を指定する。HTTPのデフォルトポートである80番や、HTTPSのデフォルトポートである443番の場合は通常省略されるが、それ以外のポート番号でサービスが提供されている場合は明示的に指定する必要がある。例えば、8080番ポートで動作するWebアプリケーションにアクセスする場合は「Host: www.example.com:8080」となる。Webサーバーソフトウェア、例えばApache HTTP ServerやNginxは、このHostヘッダの値を基にしてリクエストを処理する。サーバーの設定ファイル内では、ドメイン名ごとにバーチャルホスト設定が記述されており、それぞれに対応するドキュメントルート(ウェブサイトのファイルが置かれているディレクトリ)や適用するルールが定義されている。サーバーは受信したリクエストのHostヘッダと設定ファイル内のサーバー名を照合し、合致したバーチャルホストの設定に従って処理を実行する。また、HostヘッダはWebサーバーだけでなく、リバースプロキシやロードバランサといった中間サーバーにおいても重要な役割を担う。リバースプロキシは、クライアントからのリクエストを代理で受け取り、背後にある複数のWebサーバーへ転送する役割を持つが、その際にHostヘッダの値を見て、どのバックエンドサーバーにリクエストを転送するかを決定する。これにより、URLのパスだけでなくドメイン名に基づいた柔軟なルーティングが可能となる。さらに、HTTPS通信においては、Hostヘッダと類似した役割を持つ技術としてSNI(Server Name Indication)が存在する。HTTPSでは、通信内容を暗号化するためにTLS/SSLハンドシェイクという手続きを最初に行う。この段階で、サーバーはクライアントにデジタル証明書を提示する必要がある。仮想ホスト環境では、サーバーはドメイン名ごとに異なる証明書を保持しているため、どの証明書を提示すべきかを判断しなければならない。しかし、TLSハンドシェイクの時点ではHTTP通信はまだ始まっておらず、暗号化された通信路も確立されていないため、Hostヘッダを読み取ることができない。この問題を解決するのがSNIである。SNIはTLSの拡張機能であり、クライアントがTLSハンドシェイクの初期段階でアクセスしたいホスト名をサーバーに通知する。サーバーはこのSNI情報を使って適切な証明書を選択し、クライアントに提示する。これにより、一つのIPアドレスで複数のHTTPSサイトを運用することが可能となる。SNIはTLS層で、HostヘッダはHTTP層で、それぞれが宛先ホストを特定するという点で密接に関連している。このように、Hostヘッダは単純なヘッダ情報でありながら、仮想ホストの実現、リクエストのルーティング、そして関連技術との連携を通じて、現代の複雑なWebシステムを支える基本的な仕組みを提供しているのである。システムエンジニアは、Webサーバーの構築やトラブルシューティングを行う上で、このHostヘッダの挙動を正確に理解しておくことが極めて重要である。