【入門編】HTTP/1.1の条件付きGETリクエスト(If-Modified-Sinceと304 Not Modified) – HTTPプロトコル・通信規格実践ガイド

なぜWebサイトは「何も変わっていない」ことを知っているのか?——HTTP条件付きGETの魔法

こんにちは!日夜、パケットの海を泳ぎ回っているネットワーク・アーキテクトです。

Webサイトを見ているとき、ふと疑問に思ったことはありませんか?「さっき見たページをもう一度開いても、読み込みが速いのはなぜだろう?」と。

実はそこには、HTTP/1.1という規格が導入した「条件付きGET(Conditional GET)」という、非常に賢い仕組みが隠されています。今日は、この「無駄を徹底的に省く」という通信界の省エネ術を、身近な例えを交えて紐解いていきましょう。

—

郵便配達で例える「条件付きGET」

想像してみてください。あなたは毎日、特定の雑誌を購読しているとします。

もし、配達員さんが「今日も新しい号が届きました!」といって、中身が前回と全く同じ雑誌を、毎日毎日、重い荷物を抱えて玄関まで運んできたらどう思いますか? 「いや、中身が同じならわざわざ持ってこなくていいよ!」って言いたくなりますよね。

Webの世界での通信もこれと同じです。

1. ブラウザ(あなた): 「この画像、まだ持ってるやつと同じ?」
2. サーバー(配達員): 「中身を確認します……あ、前回から更新されてないですね」
3. サーバー(回答): 「じゃあ、データ本体は送らなくていいや。『304 Not Modified(変更なし)』とだけ伝えておこう」

こうすることで、巨大なデータファイルをネットワークに乗せる必要がなくなり、あなたの通信料も節約され、Webサイトの表示も爆速になるわけです。

—

主役は「If-Modified-Since」という魔法の言葉

この仕組みを実現しているのが、ブラウザから送られる`If-Modified-Since`というヘッダー情報です。日本語に直すと「もし、この日時以降に変更されていたら送ってね」という意味になります。

具体的なやり取りを見てみましょう。

1. 初回アクセス(普通にデータを要求)

まずはブラウザがサーバーに「このファイルをください」と頼みます。サーバーはファイルと一緒に「このファイルは2023年10月1日 10:00に更新されたものですよ」というメモ(Last-Modified)を添えて渡します。

2. 2回目以降のアクセス(条件付きGET)

ブラウザは賢いので、手元にあるファイルに付いていた「2023年10月1日 10:00」というメモを覚えています。そして次回アクセスする際にこう言います。

> 「ねえ、これ持ってるんだけど、2023年10月1日 10:00以降に更新されてる?」

これが `If-Modified-Since: Sat, 01 Oct 2023 10:00:00 GMT` というコードです。

—

サーバーからの回答:304 Not Modified

サーバーは手元のファイルを見ます。もし更新日が同じなら、サーバーはこう返します。

HTTP/1.1 304 Not Modified

これを受け取ったブラウザは、「おっ、変更なしか!じゃあ、今手元にあるデータをそのまま表示すればいいや」と判断し、キャッシュ(保存していたデータ)を即座に表示します。

コードで表現すると、こんな雰囲気です。

/ ブラウザからのお伺い /
GET /images/logo.png HTTP/1.1
Host: example.com
/ 「10月1日以降に更新されたら送ってね!」という条件 /
If-Modified-Since: Sat, 01 Oct 2023 10:00:00 GMT

/ サーバーからの回答:本体は送らず、ステータスだけ返す /
HTTP/1.1 304 Not Modified
Date: Wed, 04 Oct 2023 12:00:00 GMT
/ これにより、通信データ量が激減します /

—

なぜこれが「最高」の仕組みなのか?

インフラエンジニアの視点で見ると、この仕組みには2つの大きなメリットがあります。

  • 帯域幅の節約(トラフィック削減): 大容量の動画や画像データを何度も送らなくて済みます。
  • サーバー負荷の軽減: サーバー側も「データを読み込んで送信する」という重たい処理をスキップできます。

「変更がないなら送らない」。この単純極まりないルールこそが、現代の巨大なインターネットを支える屋台骨になっているのです。

まとめ:一歩ずつ理解していきましょう

最初は「ヘッダー?」とか「GET?」といった専門用語に圧倒されるかもしれません。でも、一つひとつを「郵便のやり取り」に置き換えてみると、案外シンプルだと思いませんか?

  • If-Modified-Since = 「これ以降、変わった?」という確認メッセージ
  • 304 Not Modified = 「変わってないから、手元の使っていいよ」という返事

明日、あなたがブラウザでWebサイトを見るとき、裏側でパケットたちがこんな風にスマートなやり取りをしていることを想像してみてください。そうすれば、ネットワークの世界が少しだけ身近に、そして面白く感じられるはずです。

さて、次は「ETag」という、日付以外の方法で変更を検知する少し高度なテクニックについてお話しできればと思います。また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました