我想做的是在 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 会缓存文件,但下次我加载页面时,Firebug 显示 304 响应,表明它仍然对该文件进行了网络请求,然后发现它没有更改。
所以我的问题是,当有查询字符串时,Firefox 是否会忽略 JavaScript 的过期标头和缓存?
相关: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 中的 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