私がしたいのは、アプリケーションの新しいバージョンが更新されるたびにjavascriptがダウンロードされるように、javascriptパスの最後にクエリ文字列を追加することです。ただし、クエリ文字列が同じであれば、http要求を行わずにキャッシュされたバージョンを使用して、スクリプトが変更されたかどうかを確認する必要があります。Firefoxはjavascriptをキャッシュし、パスにクエリー文字列がある場合はリクエストなしで使用しますか?
PHPでこれを達成する方法は、CVSタグから読み取ることです。アプリ限り
<script src="javascript/messages/shipments.js?TPRSAPPS-DEV2_090828145712237-BRANCH" type="text/javascript"></script>
を:私は出力するHTMLを構築していた場合、それはこのようになりますスクリプトタグを作成するように、私はCVSタグを読み、JavaScriptのパスの最後に追加することを使用します変更されていない場合、タグは同じままであり、したがってクエリ文字列も変更されません。ブラウザーはJSをキャッシュし、満了日が近いためにネットワーク要求をまったく実行しません。アプリケーションが更新されるたびに、そのクエリ文字列が変更され、ブラウザはそれをダウンロードする必要があります。
これはIE8でうまくいきます。私の問題はFirefoxにあります。 Firefoxはファイルをキャッシュしますが、次回にページをロードするときに、Firebugは304応答を表示します。これは、ファイルに対するネットワーク要求がまだ行われていないことを示しています。
私の質問は、firefoxはクエリ文字列があるときにexpiresヘッダとjavascriptのキャッシュを無視しますか?
関連:what does firefox decide not to cache? 明らかにRailsは何か類似しています。しかし、これは私の質問に答えるものではありません。ここで
が、私は、このファイルに戻って取得しています応答である:
https://appdev.prsx.net/~jhargett/PRSApps-Motorlog/javascript/menuReader.js?TPRSAPPS-DEV2_090828145712237-BRANCH-DIFFERENT
HTTP/1.1 304 Not Modified
Date: Mon, 03 Oct 2011 18:35:26 GMT
Server: Apache/2.2.3 (Red Hat)
Connection: close
Etag: "179010-3f8-49a9a74334200"
Vary: Accept-Encoding
Firebugの中Cacheタブは言う:あなたが見ているのは何
Last Modified Mon Oct 03 2011 13:35:26 GMT-0500 (Central Daylight Time)
Last Fetched Mon Oct 03 2011 13:35:26 GMT-0500 (Central Daylight Time)
Expires Fri Oct 28 2011 18:33:31 GMT-0500 (Central Daylight Time)
Data Size 345
Fetch Count 12
Device disk
あなたのHTTPレスポンスヘッダーは次のようになりますか?それはここで重要なことです。 – Pointy
304を実行するのは正常です。 Firefoxは少なくとも "if-modified-since"ヘッダーを使ってページ上のすべてのリソースに対してGETリクエストを送信します。新しいコンテンツ(200)または変更されていない304で返信するのはサーバーに任されます。 –
期限切れヘッダが遠い場合は、まったくリクエストを行う必要があります。 –