Internet Explorer でキャッシュを防止する方法

警告

廃止され、サポート対象外となった Internet Explorer 11 デスクトップ アプリケーションは、特定のバージョンの Windows 10 で Microsoft Edge の更新プログラムを通じて完全に無効になります。 詳細については、「Internet Explorer 11 デスクトップ アプリの廃止に関する FAQ」をご覧ください。

この記事では、Internet Explorer で HTTP ヘッダーを使用して Web ページのキャッシュを制御する方法について説明します。

元の製品バージョン: Internet Explorer
元の KB 番号: 234067

まとめ

Microsoft インターネット インフォメーション サーバー (IIS) を使用すると、特定の Active Server ページ (ASP) ページの極端な先頭にある次のスクリプトを使用して、揮発性の高いページや機密性の高いページを簡単にマークできます。

<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>

Expiration と Expires ヘッダー

すべての Web サーバーで、すべての Web ページの有効期限にスキームを使用することを強くお勧めします。 Web サーバーでは、要求するクライアントに返されるすべてのリソースに対して HTTP Expires 応答ヘッダーを介して有効期限情報を提供しないのは不適切な方法です。 現在、ほとんどのブラウザーと中間プロキシは、この有効期限情報を尊重し、ネットワーク経由の通信の効率を向上させるために使用します。

Expires ヘッダーを常に使用して、サーバー上の特定のファイルをクライアントによって更新する必要がある最も適切な時刻を指定します。 ページが定期的に更新される場合、更新の次の期間が最も効率的な応答です。 たとえば、毎日午前 5 時に更新されるインターネット上の毎日のニュース ページを見てみましょう。このニュース ページの Web サーバーは、翌日の午前 5 時の値を持つ Expires ヘッダーを返す必要があります。 完了したら、ページが変更されるまで、ブラウザーは Web サーバーにもう一度接続する必要はありません。

変更が予想されないページには、約 1 年間の有効期限が設定されている必要があります。

多くの場合、Web サーバーには、すぐに変更される可能性がある情報を含む 1 つ以上の揮発性ページがサーバー上にあります。 これらのページは、Expires ヘッダーの値が "-1" のサーバーによってマークされている必要があります。 ユーザーによる今後の要求では、通常、Internet Explorer は、条件付き If-Modified-Since 要求を使用してそのページの更新を Web サーバーに接続します。 ただし、ページはディスク キャッシュ (一時インターネット ファイル) に残ります。 また、このページは、次のようなリモート Web サーバーに接続せずに適切な状況で使用されます。

  • [戻る] ボタンと [転送] ボタンを使用してナビゲーション履歴にアクセスする場合。
  • ブラウザーがオフライン モードの場合。

Cache-Control ヘッダー

ただし、一部のページは非常に揮発性または機密性が高く、ディスク キャッシュは必要ありません。 このため、Internet Explorer では HTTP 1.1 Cache-Control ヘッダーがサポートされています。 このヘッダーは、キャッシュなし値が HTTP 1.1 サーバーで指定されている場合に、特定の Web リソースのすべてのキャッシュを防止します。

キャッシュから保持されているページは、ブラウザーが Web サーバーを再コンクトできるようになるまでアクセスできません。 そのため、サーバーは Cache-Control ヘッダーを控えめに使用する必要があります。 ほとんどの場合、Expires: -1 を使用することをお勧めします。

Pragma: No-Cache ヘッダー

残念ながら、レガシ HTTP 1.0 サーバーでは Cache-Control ヘッダーを使用できません。 HTTP 1.0 サーバーとの下位互換性のために、Internet Explorer では、HTTP プラグマ (キャッシュなしヘッダー) の特別な使用方法がサポートされています。 クライアントがセキュリティで保護された接続 (https://) 経由でサーバーと通信し、サーバーが Pragma: no-cache ヘッダーを応答と共に返した場合、Internet Explorer は応答をキャッシュしません。

ただし、Pragma: no-cache ヘッダーはこの目的に適していませんでした。 HTTP 1.0 および 1.1 の仕様に従って、このヘッダーは要求のコンテキストでのみ定義され、応答では定義されません。 これは、特定の重要な要求が宛先 Web サーバーに到達するのを妨げる可能性があるプロキシ サーバーを対象としています。 今後のアプリケーションでは、キャッシュ制御ヘッダーがキャッシュを制御するための適切な手段です。

HTTP-EQUIV メタ タグ

HTML ページでは、HTML ドキュメント内から特定の HTTP ヘッダーを指定する特別な HTTP-EQUIV 形式の META タグを使用できます。 プラグマを使用する短い HTML ページの例を次に示します。キャッシュなしと有効期限: -1:

<HTML>
    <HEAD>
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Expires" CONTENT="-1">
    </HEAD>
<BODY>
</BODY>
</HTML>

プラグマ: キャッシュなしでは、セキュリティで保護された接続で使用した場合にのみキャッシュが禁止されます。 プラグマ: キャッシュなし META タグは、セキュリティで保護されていないページで使用される場合は、Expires: -1 と同じように扱われます。 ページはキャッシュされますが、すぐに期限切れとしてマークされます。

Cache-Control META HTTP-EQUIV タグは無視され、Internet Explorer バージョン 4 または 5 には影響しません。 Cache-Control を使用するには、前述の「Cache-Control」セクションで説明したように、HTTP ヘッダーを使用してこのヘッダーを指定する必要があります。

Note

標準の HTTP ヘッダーの使用は、META タグよりも優先されます。 通常、META タグは HTML HEAD セクションの先頭に表示される必要があります。 Pragma HTTP-EQUIV META タグには、少なくとも 1 つの既知の問題があります。

キャッシュのサーバー オプション

ASP 以外のページで Cache-Control ヘッダーを使用する必要がある場合は、サーバー構成のオプションを使用して、このヘッダーを自動的に追加することが必要になる場合があります。 特定のディレクトリのサーバー応答に HTTP ヘッダーを追加するプロセスについては、サーバードキュメントを参照してください。 たとえば、IIS 4 では、次の手順に従います。

  1. IIS マネージャーを起動します。
  2. コンピューターとサービス のツリーで、既定の Web サーバーまたは該当する Web サーバーを開きます。 Cache-Control ヘッダーが必要なコンテンツを含むディレクトリを見つけます。
  3. そのディレクトリの Properties ダイアログを開きます。
  4. HTTP ヘッダー タブを選択します。
  5. [カスタム HTTP ヘッダー] グループで Add ボタンを選択し、ヘッダー名に Cache-Control を追加し、ヘッダー値のキャッシュなしを追加します。

Web サーバー全体でこのヘッダーをグローバルに使用することはお勧めしません。 その使用は、クライアント上で絶対にキャッシュしてはならないコンテンツにのみ制限します。

問題のチェックリスト

この記事の手法を適用しても、キャッシュと Internet Explorer で問題が解決しない場合は、テクニカル サポートに問い合わせる前に、この便利なチェックリストを順を追って確認してください。

  • ASP Response.CacheControl プロパティまたは返された HTTP ヘッダーを使用して Cache-Control ヘッダーを使用していますか? Internet Explorer でのキャッシュを本当に防ぐ唯一の方法です。
  • Internet Explorer 4.01 Service Pack 2 以降を使用していますか? 以前のバージョンのブラウザーでキャッシュを完全に防ぐ方法はありません。
  • Web サーバーで HTTP 1.1 が有効になっていて、Internet Explorer に HTTP 1.1 応答が返されていることを再確認しましたか? HTTP 1.0 応答では、キャッシュ制御ヘッダーが無効です。
  • サーバー側で CGI/ISAPI/サーブレットを使用している場合、特に HTTP ヘッダーの CRLF 終了について、HTTP 1.1 仕様に正確に従っていますか? パフォーマンスのために、Internet Explorer は通常、HTTP 1.1 仕様に違反する応答を容赦しない状態です。 通常、予期しないサーバー エラーのヘッダーまたはレポートは無視されます。
  • HTTP ヘッダーのスペルは正しいですか?

関連項目