![尽管缓存指令 max-age 为 30 天,我如何强制浏览器检查新版本?](https://linux22.com/image/616642/%E5%B0%BD%E7%AE%A1%E7%BC%93%E5%AD%98%E6%8C%87%E4%BB%A4%20max-age%20%E4%B8%BA%2030%20%E5%A4%A9%EF%BC%8C%E6%88%91%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E6%B5%8F%E8%A7%88%E5%99%A8%E6%A3%80%E6%9F%A5%E6%96%B0%E7%89%88%E6%9C%AC%EF%BC%9F.png)
我的网站根目录中有以下声明:
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
我认为这会告诉浏览器不要查找任何文件的新版本,除非它超过 30 天 - 对吗?
这不是我的本意,我已经修改了说明,但是尽管有旧说明,一些浏览器现在仍在更新,但有些浏览器却没有。有没有办法强制浏览器立即查找新版本?
谢谢。
答案1
如果浏览器没有对文件发出请求(直到文件过期),那么您就无法给它提供新的缓存指令。
但是,我注意到 staticContent 位。如果这仅适用于静态内容,而不适用于(可能)动态的 html 页面,那么您可以更改 html 中引用的 url。这可能很容易组织,也可能不容易,具体取决于您如何生成内容,但总的来说,这是一种非常合理的策略。
例如,你可以获取 css 文件路径(或你引用的任何其他静态内容),加上上次更改的时间戳,连接这些字符串,然后对它们进行 md5 哈希处理。然后使用如下 URLhttp://example.com/static/{your_md5sum}.css 放在您的 html 中,并复制或链接 css 内容,以备在该路径上提供。然后,您可以始终提供具有多年有效期的 css 链接,但只要您愿意,就不要再使用旧版本。如果您想保留旧版本,这也是很好的,因为例如,它们可以与人们可能已在网络上其他地方复制的旧版页面、旧电子邮件或其他任何东西一起使用(后者更多地用于图像而不是 css)。
一个稍微简单的机制可能是只在路径中添加时间戳,例如http://example.com/foo/bar.css?t=1377075018,时间戳取自本地服务器上文件的修改时间。