响应未携带cache-control头也会被缓存吗?是什么原因导致的?
无
Cache-Control头时资源仍被缓存的原因 
- 启发式缓存生效
HTTP/1.1 规范允许浏览器、缓存代理在响应没有明确缓存指令时,启用启发式缓存策略。通常会根据Last-Modified和Date响应头计算缓存有效期,通用规则是取(Date值 - Last-Modified值) * 10%作为缓存时长,例如资源最后一次修改是100天前,就会默认缓存10天。 Expires头生效Expires是HTTP/1.0版本的缓存控制字段,优先级低于Cache-Control,如果响应未返回Cache-Control,Expires指定的绝对过期时间会直接生效,触发资源缓存。- 中间缓存节点自定义规则
如果资源经过CDN、反向代理、运营商缓存等中间节点,即使源站没有返回Cache-Control,中间节点也可能根据自身配置对静态资源(图片、JS、CSS等)默认设置缓存规则,缓存后返回给客户端。 - 304响应沿用旧缓存规则
如果该资源此前已经被浏览器缓存,本次请求服务端返回304 Not Modified告知资源无更新,本次响应可以不携带Cache-Control头,浏览器会直接沿用之前的缓存规则继续使用现有缓存。 - 浏览器默认缓存策略
各大浏览器对静态资源都有内置的默认缓存逻辑,针对无明确缓存指令的图片、样式、脚本等资源,会默认做短时间的本地缓存,减少重复请求的性能消耗。
你可以打开浏览器开发者工具的网络面板,查看该资源缓存详情中的「到期时间」字段,即可反推当前生效的缓存规则。
内容的提问来源于stack exchange,提问作者David Klempfner
相关产品推荐
相关产品推荐

