明明没有配置任何缓存策略,浏览器还是给我强缓存了?
我起了一个简单的
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
。
参考文档: