我有一个设置了所有缓存控制功能的页面,但是,Google一直在从缓存中提取它。我们清空了所有导航历史记录,但在重新加载一次之后,Chrome再次缓存它:
Request URL:http://stuf.com/path/to/foo
Request Method:GET
Status Code:200 OK (from cache)
Response Headers
Accept-Ranges:bytes
Age:0
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Content-Encoding:gzip
Content-Language:fr
Content-Length:7289
Content-Type:text/html; charset=utf-8
Date:Fri, 17 Jul 2015 23:19:54 GMT
Expires:Fri, 01 Jan 2010 00:00:00 GMT
Server:nginx
Vary:Accept-Language, Cookie, Accept-Encoding
Via:1.1 varnish
X-Varnish:1867509088
X-Varnish-Cache:MISS
Request Headers
Provisional headers are shown
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36我们确实有清漆装置,但正如你从X-清漆-缓存中看到的,这是一次失误。另外,状态代码部分确实声明Chrome正在使用缓存。
发布于 2016-10-31 17:34:04
在您的响应头中,Chrome声明使用时间为0,即响应已缓存了一秒钟或更短时间。
如果您等待超过一秒钟,或者包含一个缓存验证器:标题,允许浏览器触发重新验证(条件请求),而不是普通的GET请求,那么它可能会工作。
问题可能是must-revalidate (您不需要使用max-age=0):
当必须重新验证指令出现在缓存接收的响应中时,该缓存不能在条目失效后使用该条目来响应后续请求,而不首先使用源服务器重新验证该项。
如果没有和ETag或Last-Modified头,就不可能进行重新验证。
此外,您还可以跳过Expires头:
如果响应同时包含过期标头和最大期限指令,则max-age指令将覆盖过期标头,即使过期标头的限制性更强。此规则允许源服务器为给定的响应提供比HTTP/1.0缓存更长的HTTP/1.1 (或更高版本)缓存的过期时间。
来自RFC。
https://stackoverflow.com/questions/31486147
复制相似问题