0

問題:

クライアントのウェブサイトで、サイトのページごとに異なるウィジェットをホストしています。

ウィジェットをレンダリングするために、クライアントはページにスクリプトタグを含めます。このスクリプトタグはサイトのすべてのページに読み込まれ、返されるコードはページによって異なります。

したがって、このスクリプトがキャッシュされると、最終的には間違ったページのウィジェットが提供されます。

現在、スクリプトを提供するときに、応答ヘッダーを設定します

キャッシュ制御:max-age = 0
有効期限:過去24時間

それでも、ブラウザがスクリプトをキャッシュする場合があります。

質問:

httpヘッダーを使用してすべての場合にキャッシュを停止する方法はありますか、それともまったく異なるアプローチを取る必要がありますか?

アップデート:

topekが推奨するヘッダーは、スクリプトの非キャッシュ性を大幅に改善しました。ただし、[戻る]、[進む]、または[再読み込み]ボタンを使用すると、スクリプトは引き続きキャッシュされます(Chromeでは最もキャッシュに積極的と思われます)。実際に何かをクリックすると、サーバーから取得されます。

キャッシュを停止する唯一の確実な方法は、ページの読み込みごとに異なることが保証されているスクリプトソースを設定することであるようです(esilijaとtejsによって提案されています)。

4

1 に答える 1

1

これらの2つのヘッダーでうまくいくはずです。

response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT");

または、現在のページに従って名前を設定します。たとえば、ユーザーがページhttp://domain/posts/1を要求すると、スクリプト名はになりますhttp://domain/script/scriptname/posts/1。アプローチを使用しても、スクリプトはページごとにキャッシュ可能です。

のようなクエリ文字列をスクリプトに追加しないでくださいscript.js?random_string。プロキシはこのアプローチではうまく機能しません。名前にランダムな文字列を配置する場合は、.jsこのように前に配置script-0934234234.jsして、サーバーでリクエストを書き換えます。

于 2011-11-15T19:17:43.800 に答える