キャッシュ機能の対応方法
キャッシュ機能の対応方法
それでは、キャッシュ機能を持つ機器があっても適切に制御する方法を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と対で使用されます。 |
- | ○ |
HTTPヘッダには、HTTPリクエスト時に記述すべきヘッダと、HTTPレスポンス時に記述すべきヘッダがあるため、表2には「リクエスト用」と「レスポンス用」という項目を記載しています。またCache-Controlヘッダについてですが、HTTPリクエスト時に記述すべき値と、HTTPレスポンス時に記述すべき値があります。主要な値について表3に記載します。
| 値 | 概要 | HTTP リクエスト用 |
HTTP レスポンス用 |
|---|---|---|---|
| public | キャッシュ機能を使用可能にします。 | - | ○ |
| private | Webブラウザのキャッシュなど、利用者個人に限定したキャッシュ機能は使用可能にします。 プロキシサーバなど、共有するキャッシュ機能は使用不可にします。 |
- | ○ |
| no-cache | キャッシュ機能を使用不可にします。 | ○ | ○ |
| no-store | キャッシュにコンテンツを保管しないことで、キャッシュ機能を使用不可にします(private, no-cacheは、キャッシュにコンテンツを保管しても、使用不可にします。no-cacheは、キャッシュにコンテンツを保管しません)。 | ○ | ○ |
具体例として、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
