6

キャッシュの無効化手法に関する質問があります... ブラウザのキャッシュ (css、画像など) を自動的に無効にするメカニズムを Web サイトに実装しようとしています。Web サイトを更新する (画像やスタイルを変更する) たびに、プログラムでブラウザーのキャッシュを無効にできるようにしたいと考えています。

例: 現在のリリースでは、css と一部の画像が変更されています。この状況では、更新が完了した後、ユーザーが Web サイトへの要求を実行すると、ブラウザーのキャッシュが自動的に無効になり、新しい画像とスタイルの再ダウンロードが強制されるようにする必要があります。これは、クライアントの最初のリクエストに対してのみ行う必要があります...次のものはキャッシュから取得する必要があります(したがって、no-cache プラグマを設定することは問題外です)。

これが私が試したことです: BeginRequest イベントハンドラーで、次の行を追加しました:

Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetETag("\"e111293b17594f1487d136ea7e9314ac\"");

これにより、応答ヘッダーに ETag が設定されます。この ETag をリリースごとに変更し、リクエストごとに設定すると、キャッシュが無効になると思いましたが、そうではないようです。Live HTTP ヘッダーを使用して結果を確認し、応答用に ETAG が正しく設定されていますが、CSS と画像は引き続きキャッシュから取得されます。

これをどのように達成できるか、またはそれを達成できるかどうかについてのアイデアはありますか?

4

2 に答える 2

6

私は過去にこのような問題に遭遇しました。残念ながら、これを達成するための本当に良い方法を見つけることができなかったため、回避策を考え出す必要がありました. 私はこの問題を CSS ファイルに対してのみ扱っていたので、すべての CSS 参照に追加のクエリ文字列パラメーターを追加しました。たとえば、

 <link rel="stylesheet" type="text/css" 
       href="default.css?buildnumber=<%= Buildnumber %>" />

ビルド番号はリリースごとに増加するため、ブラウザーはこの新しいファイルを探す必要がありました。理想的な解決策ではありませんが、問題なく機能しました。

于 2009-11-26T16:05:59.750 に答える