通常希望浏览器缓存资源 - JavaScript、CSS、图像等,直到有新版本可用,然后确保浏览器获取并缓存新版本。
一种解决方案是在资源的文件名中嵌入版本号,但是将要以这种方式管理的资源放在带有修订号的目录中会起到同样的作用吗?文件的整个 URL 是用作浏览器缓存中的键,还是只是文件名本身和一些元数据?
如果我的代码从获取 /r20/example.js
更改为 /r21/example.js
,我可以确定 example.js 的修订版 20 是这样的吗? js
已缓存,但现在已获取修订版 21,并且现在已缓存?
最佳答案
是的,URL 任何部分的任何更改(不包括 HTTP 和 HTTPS 协议(protocol)更改)都会被浏览器(以及任何中间代理)解释为不同的资源,因此会导致浏览器缓存中的单独实体。
更新:
this ThinkVitamin article中的声明Opera 和 Safari/Webkit 浏览器不缓存带有 ?query=strings 的 URL 是 false。
向 URL 添加版本号参数是一种完全可以接受的缓存清除方法。
可能让 ThinkVitamin 文章的作者感到困惑的是,在 Safari 和 Opera 中的地址/位置栏中按 Enter 键会导致包含查询字符串的 URL 出现不同的行为。
但是,(这是重要的部分!)Opera 和 Safari 在缓存嵌入/链接图像以及样式表和脚本方面表现得像 IE 和 Firefox在网页中 - 无论它们是否有“?” URL 中的字符。 (这可以通过在普通 Apache 服务器上进行简单测试来验证。)
(如果我有声誉的话,我会对当前接受的答案发表评论。:-)
关于javascript - 是用作浏览器缓存中的键的文件名还是整个 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/83990/