Internet Explorer 9 において Webサーバーとの通信なしでキャッシュからコンテンツを表示する場合がある


現象


Internet Explorer 9 で次の設定になっている場合、Web サーバーと通信せずキャッシュされたコンテンツを表示する場合があります。そのため、Web サーバーとの通信が必要な処理を行うことなくコンテンツが表示されることがあります。例えば、クライアント証明書を使った認証が必要なコンテンツ表示などがあります。

[インターネット一時ファイルと履歴の設定] で [自動的に確認する] が設定されている (既定値)

原因


本現象は Internet Explorer 9 の仕様です。

解決方法


この動作による Internet Explorer 9としての問題や影響はありませんが、以下のいずれかの方法で毎回 Web サーバーと通信してコンテンツを取得/表示させることができます。

Web サーバー側での対応
  • コンテンツのHTTP Header やMeta タグでCache-control: no-cache もしくは max-age=0を指定
これにより、ブラウザでコンテンツがキャッシュされない (Cache-control: no-cache)、もしくは、有効期限切れの状態 (max-age=0) となるため、次回のコンテンツ取得時には必ず Web サーバーと通信します。Web サーバー側でこれらの設定を行う方法は Web サーバーソフトウェアによって異なるため、Web サーバーの管理者に問い合わせるかドキュメント等を参考してください。


Internet Explorer 側での対応
  • Internet Explorer 9 で [Web サイトを表示するたびに確認する] に設定する

本設定により、キャッシュにコンテンツが存在していても有効期限切れもしくは有効期限の指定がない場合は、Web サーバーと通信します。具体的な設定方法は以下のとおりです。
  1. Internet Explorer 9 を起動し Alt キーを押してメニューを表示します。
  2. [ツール] - [インターネットオプション] メニューを選択します。
  3. [全般] タブの [閲覧の履歴] の [設定] ボタンをクリックします。
  4. [インターネット一時ファイルと履歴の設定] で [インターネット一時ファイル] の [保存しているページの新しいバージョンがあるかどうかの確認] を [Web サイトを表示するたびに確認する] に設定します。

状況


この動作は仕様です。

詳細


Internet Explorer 9 はRFC2616に準拠し、以前のバージョンに比べて積極的にキャッシュを利用し、パフォーマンスの向上を図るようになりました。今回の現象は、明示的にキャッシュの有効期限が指定されておらず、かつ Internet Explorer 9で「インターネット一時ファイルと履歴の設定」を「自動的に確認する」にしている場合に該当します。この条件の場合でも、以前のバージョンではWebサーバーと通信を行って更新を確認していましたが、Internet Explorer 9では Web サーバーと通信せずにコンテンツをキャッシュから取得して表示する場合があります。

詳細は、 下記 [Blog:Caching Improvements in Internet Explorer 9] の Heuristic Cache Improvements を参照して下さい。