1. ホーム
  2. asp.net

[解決済み] ASP.NETからすべてのブラウザのキャッシュを無効にする

2023-04-09 12:17:19

質問

ブラウザがページをキャッシュするのを無効にするために必要な ASP.NET コードの決定的なリファレンスが必要です。HTTP ヘッダーとメタ タグに影響を与える多くの方法があり、異なるブラウザーが正しく動作するようにするには、異なる設定が必要な印象を受けます。すべてのブラウザで動作し、バージョンを含む特定のブラウザで必要なものを示すためにコメントされたコードの参照ビットを得ることは、本当に素晴らしいことです。

この問題については膨大な量の情報がありますが、各手法の利点と、特定の手法がより高いレベルの API によって取って代わられたかどうかを説明する良い参考文献はまだ見つかっていません。

私は特に ASP.NET 3.5 SP1 に興味がありますが、以前のバージョンの回答も得られるとよいでしょう。

このブログのエントリ Firefox と IE のキャッシュの 2 つの重要な違い では、いくつかの HTTP プロトコルの動作の違いについて説明しています。

次のサンプル コードは、私が関心を持っている種類のものを示しています。

public abstract class NoCacheBasePage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        DisableClientCaching();
    }

    private void DisableClientCaching()
    {
        // Do any of these result in META tags e.g. <META HTTP-EQUIV="Expire" CONTENT="-1">
        // HTTP Headers or both?

        // Does this only work for IE?
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        // Is this required for FireFox? Would be good to do this without magic strings.
        // Won't it overwrite the previous setting
        Response.Headers.Add("Cache-Control", "no-cache, no-store");

        // Why is it necessary to explicitly call SetExpires. Presume it is still better than calling
        // Response.Headers.Add( directly
        Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
    }
}

どのように解決するのですか?

ASP.NETで使っているものです。

// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox
Response.Cache.SetNoStore();

FirefoxとIEではキャッシュを停止しますが、他のブラウザでは試していません。これらの記述により、以下のレスポンスヘッダが追加されます。

Cache-Control: no-cache, no-store
Pragma: no-cache