TOPシステム開発> キャッシュ機能の対応方法
システムの運用と保守
システムの運用・保守を考えていますか?

第3回:システム利用環境を考慮していますか?

著者:みずほ情報総研  老川 正志   2007/9/19
前のページ  1  2  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

前のページ  1  2  3  次のページ


みずほ情報総研株式会社 老川 正志
著者プロフィール
みずほ情報総研株式会社  老川 正志
技術企画部 システムエンジニア
2001年、株式会社富士総合研究所(現 みずほ情報総研株式会社)入社。システム開発部門への技術支援業務を経験後、データセンター ソリューション「TEXIV(テキシブ)」の立ち上げに参画、2002年から現職。現在は、ホスティングサービス事業の拡大のほか、システム開発効率向上の企画・調査を担当。


INDEX
第3回:システム利用環境を考慮していますか?
  トラブル事例
キャッシュ機能の対応方法
  対応法2:METAタグによるキャッシュ制御