我们有一个具有大量静态资源的项目,以加快页面加载速度,我们经常使用浏览器缓存。现在我们面临的问题是每次更新一个静态内容css或者js。用户提示一些问题。我知道用户可以手动清除缓存并获得正确的东西。但是当更新文件出现时不可能。它会加载自身的新版本,我们将 php 与 wamp 一起使用。
最佳答案
首先,这取决于您发送 expires
header 的时长——一天?星期?月?
无论您何时设置过期 header ,您都必须等到那个时间到了,然后浏览器才能开始联系服务器以获取新版本。所以你将不得不更改 url 正如其他人所指出的那样。
但是,还有另一个不错的选择,对于 future ...
如果您设置了'cache-control: "no-cache, must-revalidate"'
和较短的过期时间,那么浏览器会在每次需要时与服务器进行检查重新显示缓存的对象,使用 “If-Modified-Since”
请求 header 发送您的服务器最初在其“Last-Modified”中与该缓存对象一起发送的最后时间戳响应头。如果对象自客户端发送的时间戳以来已更新,则服务器将发送新对象和新的Last-Modified
时间戳 header 。否则,它将仅使用“304-Not Modified”响应 header 进行响应。
因此,重新验证的优点是您仍然可以节省一些带宽,并且客户端显示“陈旧”对象的风险很小,但缺点是客户端必须等待,同时您的服务器检查客户端的 If-Modified-Since header 文件的“Last-Modified”时间戳,当然,服务器必须实际检查文件系统以获得“Last-Modified”时间。因此,所保存的只是实际的内容传输带宽和传输时间。
好的阅读资源:
关于php - 我们可以通过一些代码强制清除浏览器缓存吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498505/