我们有几个文件通过 HTTP 提供,并且不时更改。
哪些是与缓存相关的 HTTP 标头,我们应该在 HTTP 响应中返回以优化浏览器加载速度,同时强制浏览器验证它是否具有文件的最新版本?
我们已经设置了一个带有过去日期的“Expires”标题(此时似乎达成了共识)。
但是有些人建议设置此标头:
Cache-Control: no-cache, no-store, must-revalidate
但是这个头的问题是它阻止了浏览器保留文件的本地副本,所以每次下载文件,即使它没有改变,也有 200 响应代码。
如果我只是使用:
Cache-Control: no-cache
然后浏览器(至少 Firefox 14 和 Chrome 20)保留本地副本,发送If-Modified-Since
和If-None-Match
headers,服务器返回 304 代码并且文件内容没有下载。 这是这些文件可以随时更改的最佳行为。
问题是我不知道仅设置“无缓存”是否足以强制所有浏览器(包括旧但仍在使用的版本)和代理服务器使用服务器重新验证其本地缓存的副本。
最后,Pragma: no-cache
标题呢?它也应该包含在 HTTP 响应中吗?