通常希望浏览器缓存资源 - JavaScript,CSS,图像等,直到有新版本可用,然后确保浏览器取代并缓存新版本.
一种解决方案是在资源的文件名中嵌入一个版本号,但是将以这种方式管理的资源放在一个带有修订号的目录中也可以做同样的事情吗?该文件的整个URL是否用作浏览器缓存中的密钥,还是仅仅是文件名本身和一些元数据?
如果从获取我的代码更改/r20/example.js
到/r21/example.js
,我可以肯定的是修订20 example.js
被缓存,但现在修订21已经不是获取它,这就是缓存?
是的,URL的任何部分的任何更改(不包括HTTP和HTTPS协议更改)都会被浏览器(以及任何中间代理)解释为不同的资源,因此将导致浏览器缓存中的单独实体.
更新:
在这篇ThinkVitamin文章中,Opera和Safari/Webkit浏览器不使用?query = strings缓存URL 的说法是错误的.
向URL添加版本号参数是执行缓存清除的完全可接受的方法.
可能让ThinkVitamin文章的作者感到困惑的是,在Safari和Opera中的地址/位置栏中按Enter键会导致其中包含查询字符串的URL的行为不同.
然而,(这是重要的部分!)Opera和Safari 在网页中缓存嵌入/链接图像和样式表和脚本时的行为就像IE和Firefox一样 - 无论它们是否具有"?" 他们的网址中的字符.(这可以通过普通Apache服务器上的简单测试来验证.)
(如果我有声誉的话,我会评论目前接受的答案.:-)