明明没有配置任何缓存策略,浏览器还是给我强缓存了?
我起了一个简单的
http服务,主要作用就是代理静态资源,在更新静态资源后,发现浏览器访问的还是旧的资源,翻来覆去检查响应头,并没有配置任何缓存策略,而且静态资源请求也都变成disk cache或memory cache,很明显是被强缓存了
这里,很多同学大概率是掉入了启发式缓存的坑。
启发式缓存(Heuristic caching),在没有明确缓存配置时(可以简单的理解为没有设置Cache-Control或Expires响应头),响应头有设置Last-Modified信息,就会触发一个默认缓存策略。
如下响应头示例:
1 |
|
这里的Date创建时间大于Last-Modified一年,那么浏览器会默认进行读取本地缓存时间为1year * 0.1约为36.5天,即在接下来的36.5天里,不会发送HTTP请求,直接拉取本地缓存,表现为disk cache或者memory cache。参考源码片段:
1 | return (creationTime - lastModified) * 0.1; |
如要避免浏览器的默认缓存策略(启发式缓存),建议配置Cache-Control或Expires响应头的过期时间为0。
参考文档: