インターネット エクスプローラーでのキャッシュを防止する方法

警告

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

この記事では、インターネット エクスプローラーの Web ページのキャッシュを制御するために HTTP ヘッダーを使用する方法について説明します。

元の製品バージョン:インターネット エクスプローラー
元の KB 番号: 234067

概要

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

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

有効期限と Expires ヘッダー

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

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

変更が予想されないページは、有効期限が約 1 年のマークを付ける必要があります。

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

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

Cache-Control ヘッダー

ただし、特定のページは非常に揮発性または機密性が高く、ディスク キャッシュを必要としません。 このため、インターネット エクスプローラーでは 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 サーバーとの下位互換性のために、インターネット エクスプローラーでは、HTTP Pragma: no-cache ヘッダーの特別な使用方法がサポートされています。 クライアントがセキュリティで保護された接続 (https://) 経由でサーバーと通信し、サーバーから Pragma: no-cache ヘッダーと応答が返された場合、インターネット エクスプローラーは応答をキャッシュしません。

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

HTTP-EQUIV META タグ

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

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

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

Cache-Control META HTTP-EQUIV タグは無視され、インターネット エクスプローラー バージョン 4 または 5 には影響しません。 Cache-Control を使用するには、上記の「Cache-Control」セクションで説明されているように、HTTP ヘッダーを使用してこのヘッダーを指定する必要があります。

注:

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

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

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

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

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

問題のチェックリスト

この記事の手法を適用しても、キャッシュとインターネットのエクスプローラーで問題が解決しない場合は、テクニカル サポートに問い合わせる前に、この便利なチェックリストを段階的に確認してください。

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

関連項目