私がやりたいのは、javascriptパスの最後にクエリ文字列を追加して、アプリケーションが新しいバージョンに更新されるたびにjavascriptがダウンロードされるようにすることです。ただし、クエリ文字列が同じである限り、スクリプトが変更されているかどうかを確認するためにhttpリクエストを実行せずに、キャッシュされたバージョンを引き続き使用する必要があります。
PHPでこれを実現する方法は、CVSタグから読み取ることです。出力するHTMLを作成するときは、CVSタグを読み取り、それを使用してjavascriptパスの最後に追加して、次のようなスクリプトタグを作成します。
<script src="javascript/messages/shipments.js?TPRSAPPS-DEV2_090828145712237-BRANCH" type="text/javascript"></script>
アプリが変更されていない限り、タグは同じままであるため、クエリ文字列も変更されます。有効期限がはるかに長いため、ブラウザはJSをキャッシュし、ネットワークリクエストをまったく実行しないようにする必要があります。アプリが更新されるたびに、そのクエリ文字列が変更され、ブラウザはそれをダウンロードする必要があります。
これはIE8でうまく機能します。私の問題はFirefoxにあります。Firefoxはファイルをキャッシュしますが、次にページをロードすると、Firebugは304応答を表示します。これは、ファイルに対してネットワークリクエストを実行し、ファイルが変更されていないことを示しています。
だから私の質問は、Firefoxはクエリ文字列があるときにjavascriptのexpiresヘッダーとキャッシュを無視しますか?
関連:Firefoxは何をキャッシュしないことにしましたか? どうやら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の[キャッシュ]タブには次のように書かれています。
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