システムの運用・保守を考えていますか? 3

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

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

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

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

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


HTTP
ヘッダ名
概要 HTTP
リクエスト用
HTTP
レスポンス用
Cache-Control HTTP/1.1で定義しているキャッシュ機能を制御します。
Pragma HTTP/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-Match ETagを指定します。
指定したETagとマッチする場合は、304(not modified)レスポンスを返すようにサーバへ指示します。
マッチしない場合は、コンテンツを返すようにサーバへ指示します。
-
ETag エンティティとそのバージョンを一意に識別する識別子を示します。
If-None-Matchと対で使用されます。
-
表3:キャッシュを制御するのに有効となるHTTPヘッダ

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


概要 HTTP
リクエスト用
HTTP
レスポンス用
public キャッシュ機能を使用可能にします。 -
private Webブラウザのキャッシュなど、利用者個人に限定したキャッシュ機能は使用可能にします。
プロキシサーバなど、共有するキャッシュ機能は使用不可にします。
-
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

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