浏览器缓存 JavaScript 和 CSS 文件

4
我知道当更改文件名或在其中添加查询字符串时,浏览器会强制获取缓存JS文件的新版本。
我们没有这样做,直到现在我们从未遇到浏览器提供旧文件的问题。最近,我们发现一些使用IE9的用户抱怨浏览器提供了缓存的JS/CSS文件。该问题并非每个使用该网站的人都存在。
我的理解是,当文件名或查询字符串不变,但是JS文件内容已更改时,浏览器将获取新版本。
为什么会发生这种情况,为什么不一致?
有什么想法吗?

4
浏览器如何“神奇地”在不请求文件的情况下找出内容已更改呢?浏览器仅依据URL。 - riwalk
3个回答

4

在HTTP头中为静态资源设置到期日期或最大年龄会指示浏览器从本地磁盘加载先前下载的资源,而不是通过网络加载。

如果我们想要实际缓存资源,则这很好。如果我们想强制进行新下载,请设置no-cache,这会强制缓存将请求提交给原始服务器以进行验证,然后才能释放缓存副本。这对于确保认证被尊重(与公共组合使用),或者保持严格的新鲜度而不牺牲所有缓存的好处非常有用。

HTTP服务器指定过期-规范


我该如何为特定的JS文件设置带有过期日期的HTTP标头?默认情况下,过期值是多少? - Dusty
你必须在你的Web服务器上进行设置。因此,这取决于你正在运行什么Web服务器/版本 :-) - mch_dk

1

是的,当内容看起来相同(即文件名相同)时,用户可能会在后续访问中获得这些文件的缓存版本。

这真的超出了您的控制范围...每个特定的浏览器都决定如何处理缓存,而且也取决于用户...有些人会定期清除缓存或刷新页面,如果某些东西看起来不对劲。

如果您想强制用户查看更新的CSS或JS内容,请更改CSS或JS文件名...否则,在短时间内可能会不一致,但时间长度未知。

这个教程可能会帮助您...

http://www.mnot.net/cache_docs/


0
例如,Chrome会缓存脚本直到按下Shift + F5或一段时间过去(忽略它在服务器上已更改的事实,甚至不发送请求)。
其他浏览器也会这样做(但仅当启用缓存时)-我无法准确描述何时发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接