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
|