キャッシュ機能の対応方法

キャッシュ機能の対応方法

それでは、キャッシュ機能を持つ機器があっても適切に制御する方法を2つ説明します。

対応法1:HTTPヘッダによるキャッシュ制御

1つ目の対応方法としては、HTTPヘッダにキャッシュを制御するヘッダを付ける方法です。キャッシュを制御するために有効なHTTPヘッダは、表3の通りになります。


HTTP
ヘッダ名
概要HTTP
リクエスト用
HTTP
レスポンス用
Cache-ControlHTTP/1.1で定義しているキャッシュ機能を制御します。○○
PragmaHTTP/1.0では、Cache-Controlヘッダを実装していません。
そこで「Pragma: no-cache」と記述することで、「Cache-Control: no-cache」と同じ効果が得られます。
○○
Expiresコンテンツの有効期限を指定します。-○
If-Modified-Since日時を指定します。
指定した日時より新しいコンテンツの場合は、コンテンツを返すようにサーバへ指示します。
古い場合は304(not modified)レスポンスを返すようにサーバへ指示します。
○-
Last-Modifiedコンテンツの最終更新時刻を示します。
If-Modified-Sinceと対で使用されます。
-○
If-None-MatchETagを指定します。
指定したETagとマッチする場合は、304(not modified)レスポンスを返すようにサーバへ指示します。
マッチしない場合は、コンテンツを返すようにサーバへ指示します。
○-
ETagエンティティとそのバージョンを一意に識別する識別子を示します。
If-None-Matchと対で使用されます。
-○
表3:キャッシュを制御するのに有効となるHTTPヘッダ

HTTPヘッダには、HTTPリクエスト時に記述すべきヘッダと、HTTPレスポンス時に記述すべきヘッダがあるため、表2には「リクエスト用」と「レスポンス用」という項目を記載しています。またCache-Controlヘッダについてですが、HTTPリクエスト時に記述すべき値と、HTTPレスポンス時に記述すべき値があります。主要な値について表3に記載します。


値概要HTTP
リクエスト用
HTTP
レスポンス用
publicキャッシュ機能を使用可能にします。-○
privateWebブラウザのキャッシュなど、利用者個人に限定したキャッシュ機能は使用可能にします。
プロキシサーバなど、共有するキャッシュ機能は使用不可にします。
-○
no-cacheキャッシュ機能を使用不可にします。○○
no-storeキャッシュにコンテンツを保管しないことで、キャッシュ機能を使用不可にします(private, no-cacheは、キャッシュにコンテンツを保管しても、使用不可にします。no-cacheは、キャッシュにコンテンツを保管しません)。○○
表4:主要なCache-Controlヘッダの値

具体例として、HTTPレスポンスを制御する例をあげましょう。HTTPレスポンス時のヘッダは、Webサーバの設定ファイルやJSP(サーブレット)で実装することで制御します。JSPで実装する例はリスト1のようになります。

リスト1:HTTPレスポンスヘッダによるキャッシュ制御の例(JSPの場合)


(画像をクリックすると別ウィンドウに拡大図を表示します)

この例では、Expiresヘッダについて現在の日時を指定しています。ポイントは「次回のリクエスト時は、コンテンツの期限切れとする」ことです。現在の日時にしておけば、「コンテンツの有効期限が切れている」とキャッシュ機能は認識し、キャッシュを使用することはありません。

またリスト1を実行したときのHTTPレスポンスヘッダはリスト2のようになります。

リスト2:キャッシュ制御したHTTPレスポンスヘッダの例

HTTP/1.x 200 OK
Date: Thu, 06 Sep 2007 09:04:32 GMT
Server: Apache
Pragma: no-cache
Cache-Control: no-cache,no-store
Expires: Thu, 06 Sep 2007 09:04:32 GMT
Connection: close

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30