1台のマンションで、どうやって「宛先」を使い分ける?:HTTP/1.1のHostヘッダー入門
こんにちは!ネットワークの世界へようこそ。
普段、何気なくブラウザにURLを入力してWebサイトを見ていますが、その裏側では「パケット」という小さな手紙が、驚くべきスピードで世界中を飛び回っています。
今日は、そんなWeb通信の基礎中の基礎、「Host(ホスト)ヘッダー」という仕組みについてお話しします。これがなぜ重要なのか、そしてなぜこれがないとWebサイトが表示されないのか。一緒に紐解いていきましょう!
—
1. 郵便配達の例えで考えてみよう
皆さんが住んでいるマンションを想像してみてください。
一つの大きな建物(IPアドレス)には、たくさんの部屋(Webサイト)がありますよね。
もし、郵便屋さんが「このマンションに手紙を届けます!」とだけ書かれた封筒を持ってきたらどうなるでしょう?
マンションの管理人は困ってしまいます。「住所は合っているけれど、誰宛(どの部屋)か分からない!」となってしまいますよね。
Webの世界も全く同じです。
一つのサーバー(IPアドレス)の中に、複数のWebサイトが同居していることは珍しくありません。そこで、「私はこのマンションの『〇〇号室』の住人宛に用があるんです!」と伝えるための「表札」のような役割を果たすのが、Hostヘッダーなのです。
—
2. HTTP/1.1で何が変わったのか?
インターネットが始まった当初(HTTP/0.9や1.0の頃)、実は「IPアドレス=1つのWebサイト」という考え方が主流でした。でも、Webサイトが爆発的に増えると、IPアドレスが足りなくなってしまいますよね。
そこで登場したのがHTTP/1.1です。この規格では、「1つのIPアドレスの中に、複数のWebサイトを詰め込んでも、Hostヘッダーで判別すればOK!」というルール(バーチャルホスティング)が標準になりました。
これのおかげで、私たちは安価にたくさんのWebサイトを運用できるようになったんです。
—
3. 実際にパケットの中身を見てみよう
ブラウザがサーバーに送っている「通信の注文書(リクエスト)」の中身は、実はこんなにシンプルです。
GET /index.html HTTP/1.1 // どのファイルが欲しいか(GET)とHTTPのバージョン
Host: example.com // ここが重要!「どのサイトの」ファイルかを指定
User-Agent: Mozilla/5.0 … // ブラウザの種類など
もし、この2行目の `Host: example.com` がなかったらどうなるでしょうか?
サーバーは「どのサイトのデータを出せばいいの?」と迷子になってしまいます。その結果、サーバーは冷たくこう言い放ちます。
「400 Bad Request(要求が正しくありません)」
これは、「君が何を言いたいのか、住所が不完全で理解できないよ」というサーバーからのエラーメッセージなんです。
—
4. トラブルシューティングの現場から
エンジニアとして現場にいると、このエラーにはたまに遭遇します。例えば、古いプログラムや、設定ミスでHostヘッダーを付けずにリクエストを送ってしまった時です。
もし皆さんがAPIを叩いたり、プログラムを書いたりしていて「400 Bad Request」が出たら、まずは疑ってください。
「あ、Hostヘッダーの指定が漏れているかも?」と。
以下は、コマンドラインツール(curl)を使って、わざとHostを指定して通信を確認する例です。デバッグの際にぜひ試してみてください。
curlコマンドで明示的にHostヘッダーを指定して送信する例
curl -v -H “Host: example.com” http://192.168.1.10/
-v オプションを付けると、やり取りの全貌(ヘッダー内容など)が見えて勉強になります!
—
まとめ:Hostヘッダーは「Webの羅針盤」
今回覚えて帰ってほしいのは、たった一つです。
- Hostヘッダーは、1つのサーバーで複数のサイトを動かすための「宛先表示」である。
- HTTP/1.1では、このヘッダーがないとサーバーが混乱して「400エラー」を返す。
Webサイトが表示されるのは、当たり前のことではありません。ブラウザとサーバーが、こうした小さなルールを律儀に守り合っているからこそ、私たちはインターネットという広大な海を快適に渡れているのです。
これからインフラやネットワークを学んでいく中で、何かうまくいかないことがあったら、ぜひ「パケットの気持ち」になって、宛先が正しく伝わっているか想像してみてくださいね。
それでは、また次の技術解説でお会いしましょう!
コメント