2011-05-22 4 views
4

Chromeブラウザ用の拡張機能を作成しています(後でFirefoxに移植することを希望します)。この拡張機能は、XMLHttpRequestを介してXMLファイルである私のサーバーから構成ファイルをダウンロードします。私が見つけたのは、ファイルを一度ダウンロードし、その後のすべての呼び出しが単にファイルのキャッシュされたオリジナルバージョンを使用しているようだということです。サーバー上のファイルを変更するかどうかは関係ありません。XMLHttpRequest()経由でダウンロードしたときにキャッシュされたデータを避けるには

私はあなたが

xmlhttp.setRequestHeader( 'プラグマ'、 'のCache-Control:キャッシュなし')を試みることができることを読んで。

と私はこれをやったが、それは何か違いはないようです。私が新しいファイルを入手する唯一の方法は、ブラウザのキャッシュを削除することだと思われます。これは明らかに成長するユーザーのための解決策ではありません。

これは私が最初に経験する人ではないように思えます - そのようなキャッシングルールはこれを簡単に避けることのできないポリシーとして守っているようですが、私の質問は、より良いデザインは何ですか?私が知らないベストプラクティスはありますか?私は何とかして引っ張ってくるのではなく、押すべきだろうか?

答えて

4

簡単な方法は、時間を含む無駄なパラメータをリクエストに追加することです。 は、が前進し、後退しないため、クエリが一意でキャッシュされない可能性があります。例えば

(URLを仮定すると、文字列urlである):

url += '?_time=' + (new Date()).getTime(); 

や、あなたのURLが既にクエリパラメータ、

url += '&_time=' + (new Date()).getTime(); 
+0

を持っている場合でも「_timeを追加する必要はありません'、あなたはちょうど 'url + ='を実行できますか? ' +(新しいDate())。getTime() ' – Midas

+1

@Midasはい。好きなようにパラメータを呼び出すことができます(まだ存在しない限り)。私はちょうどいくつかのsysadminがApacheログで混乱しているのをうれしく思います! – lonesomeday

+0

jQueryのajaxライブラリでは、 "no cache"を強制する変数paramの名前として_(アンダースコア)を使用しています。 http://stackoverflow.com/questions/168963/stop-jquery-load-response-from-being-cached/168977#168977を参照してください。 – Cheeso

関連する問題