萌えハッカーニュースリーダー

2025/08/17 12:07 HTTP Caching

出典: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Caching
hakase
博士

やっほー、ロボ子!今日のITニュースはHTTPキャッシュについてじゃ。

roboko
ロボ子

HTTPキャッシュですか、博士。なんだか奥が深そうですね。

hakase
博士

そうぞ!HTTPキャッシュは、リクエストに関連付けられたレスポンスを保存して、後続のリクエストで再利用する仕組みのことじゃ。応答時間の短縮とオリジンサーバーの負荷軽減に繋がるから、システム全体の健全性にとってめっちゃ重要なのじゃ。

roboko
ロボ子

なるほど。キャッシュの種類も色々あるんですね。プライベートキャッシュと共有キャッシュがあるみたいですが。

hakase
博士

そうじゃ!プライベートキャッシュは特定のクライアント、つまりブラウザに紐づくキャッシュで、個人化されたレスポンスを保存できるんじゃ。`Cache-Control: private` ディレクティブで指定するぞ。

roboko
ロボ子

共有キャッシュは、クライアントとサーバーの間にあるんですね。プロキシキャッシュやマネージドキャッシュがあるみたいですが、違いは何ですか?

hakase
博士

プロキシキャッシュは、ネットワークからのトラフィックを削減するために、アクセス制御に加えてキャッシュ機能も実装するものじゃ。マネージドキャッシュは、サービス開発者が明示的に展開して、オリジンサーバーの負荷を軽減し、コンテンツを効率的に配信するキャッシュのことじゃ。CDNとかService Workerがそうじゃな。

roboko
ロボ子

`Cache-Control`ヘッダーがない場合でもキャッシュされることがあるんですね。ヒューリスティックキャッシュというんですか。

hakase
博士

そうじゃ。例えば、1年間更新されていないコンテンツは、その後もしばらく更新されないと判断されてキャッシュされることがあるんじゃ。でも今は`Cache-Control`ヘッダーを明示的に指定することが推奨されてるぞ。

roboko
ロボ子

レスポンスには新鮮(fresh)と陳腐(stale)の2つの状態があるんですね。`max-age`ディレクティブで有効期間を指定すると。

hakase
博士

`Expires`ヘッダーもあったけど、`max-age`が推奨されてるんじゃな。両方ある場合は`max-age`が優先されるぞ。

roboko
ロボ子

`Vary`ヘッダーは、同じURLでもリクエストヘッダーによって異なるレスポンスをキャッシュするために使うんですね。

hakase
博士

その通り!`Accept`、`Accept-Language`、`Accept-Encoding`などのリクエストヘッダーの値によってレスポンスが変わる場合に使うんじゃ。Cookieを使う場合は`Cache-Control: private`を使うのがおすすめじゃ。

roboko
ロボ子

陳腐化したレスポンスを検証する仕組みもあるんですね。`If-Modified-Since`や`If-None-Match`を使うんですね。

hakase
博士

`If-Modified-Since`は指定された日時以降に変更があったかどうかをサーバーに問い合わせるんじゃ。`ETag`はサーバーが生成するコンテンツのハッシュ値みたいなものじゃな。`If-None-Match`でその値をサーバーに送って、変更があったか確認するぞ。

roboko
ロボ子

`Cache-Control: no-cache`を使うと、常にサーバーから最新のコンテンツを取得できるんですね。

hakase
博士

そうじゃ!でも`Cache-Control: no-store`はレスポンスをキャッシュに保存させないから、個人情報を含むレスポンスの場合はこっちを使うんじゃ。

roboko
ロボ子

リロードと強制リロードで挙動が違うんですね。強制リロードはキャッシュを完全にバイパスするんですね。

hakase
博士

その通り!コンテンツが変更されない場合は、キャッシュバスティングで長い`max-age`を設定したり、`Cache-Control: immutable`を使って再検証を回避したりできるぞ。

roboko
ロボ子

デフォルト設定では、`Cache-Control: no-cache`を使うことが多いんですね。Cookieを使っている場合は、`Cache-Control: no-cache, private`を指定すると。

hakase
博士

そうじゃな。CDNやService Workerを使うと、キャッシュを積極的に削除できるから、もっとアグレッシブなキャッシュ戦略が取れるぞ。

roboko
ロボ子

HTTPキャッシュ、奥が深いですね。でも、ウェブサイトのパフォーマンスを上げるために、しっかり理解しておきたいです。

hakase
博士

HTTPキャッシュをマスターすれば、ウェブサイトは光速になるぞ!…たぶん。ところでロボ子、キャッシュって英語でなんて言うか知ってるか?

roboko
ロボ子

えっと…cash…ですか?

hakase
博士

ブッブー!正解は「It depends.」…キャッシュだけにね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search