首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Chrome还在缓存这个请求?

为什么Chrome还在缓存这个请求?
EN

Stack Overflow用户
提问于 2015-07-17 23:26:15
回答 1查看 2.2K关注 0票数 4

我有一个设置了所有缓存控制功能的页面,但是,Google一直在从缓存中提取它。我们清空了所有导航历史记录,但在重新加载一次之后,Chrome再次缓存它:

代码语言:javascript
复制
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正在使用缓存。

EN

回答 1

Stack Overflow用户

发布于 2016-10-31 17:34:04

在您的响应头中,Chrome声明使用时间为0,即响应已缓存了一秒钟或更短时间。

如果您等待超过一秒钟,或者包含一个缓存验证器标题,允许浏览器触发重新验证(条件请求),而不是普通的GET请求,那么它可能会工作。

问题可能是must-revalidate (您不需要使用max-age=0):

当必须重新验证指令出现在缓存接收的响应中时,该缓存不能在条目失效后使用该条目来响应后续请求,而不首先使用源服务器重新验证该项。

如果没有和ETagLast-Modified头,就不可能进行重新验证。

此外,您还可以跳过Expires头:

如果响应同时包含过期标头和最大期限指令,则max-age指令将覆盖过期标头,即使过期标头的限制性更强。此规则允许源服务器为给定的响应提供比HTTP/1.0缓存更长的HTTP/1.1 (或更高版本)缓存的过期时间。

来自RFC

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31486147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档