2011-11-15 5 views
0

問題:スクリプトをキャッシュするクロム(場合によっては他のブラウザ)には、

私はサイト上のページごとに異なるウィジェットをホストしています。

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

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

は今、私たちは時々、まだスクリプトをキャッシュするブラウザはまだレスポンスヘッダ

 
Cache-Control: max-age=0 
Expires : 24 hours in the past 

に設定してください。

QUESTION:

は、すべての場合にキャッシュを停止するか、我々は完全に異なるアプローチを取る必要があるとしているHTTPヘッダーを使用する方法はありますか?

UPDATE:大いに推奨topek

ヘッダはスクリプトの非キャッシュ可能性を向上させます。しかし、バック、フォワード、またはリロードボタンを使用しているときに(キャッシュで最も攻撃的であると思われるChromeでも)、スクリプトは引き続きキャッシュされます。実際に何かをクリックすれば、サーバからフェッチされます。

キャッシュを停止する唯一確実な方法は、ページロードごとに異なることが保証されているスクリプトソースを設定することです(esilijaとtejsの推奨)。

+1

なぜjs urlリクエストにランダムなクエリ文字列パラメータを含めるだけではないのですか?またはdatetimeなどを添付しますか? – Tejs

+1

はランダムな無意味なクエリ文字列を追加します..そうそうです: 'script.js?14091341049134'。 '+ new Date'から数値を生成します。これはミリ秒ごとに変化します。 – Esailija

+0

必要な場合は、これを行うことができます。しかし、クライアントに単一のスクリプトタグを含めるよう求めるだけのシンプルさが好きです。代わりにあなたが提案したことをする数行のjsを含めるように頼むことができると思います。 – Hersheezy

答えて

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

関連する問題