Chrome中资源缓存时间为何是Date加max-age?技术疑问
缓存过期逻辑与304状态码疑问
问题场景
- 首次请求(图片上传前)的响应头:

- 180秒后,响应头更新为:

- 再间隔180秒,清除浏览器缓存后发起请求,返回200状态码:

- 但在此次200响应后的180秒内再次请求,却返回304状态码,对此存在疑问。
核心问题
- 浏览器为何会认为缓存已过期?
- 缓存过期时间是否等于响应头
Date字段值加上Cache-Control: max-age的秒数?
解答
缓存过期时间的计算规则
是的,浏览器计算缓存过期时间的标准逻辑为:响应头的Date时间 + Cache-Control: max-age指定的秒数。例如max-age=180,即从服务器返回响应的时间(由Date字段标记)起算,180秒后缓存判定为过期。
304状态码的产生原因
清除缓存后的首次请求返回200时,浏览器会将新的响应资源、Date及max-age=180等缓存规则存入本地缓存。180秒内再次请求时,浏览器发现缓存尚未过期,但仍会发送带有If-Modified-Since(或If-None-Match)的验证请求到CDN/源服务器:
- 若服务器确认资源未发生变更,会返回304状态码,告知浏览器可直接使用本地缓存;
- 若资源已更新,则返回200状态码及新资源。
这是正常的缓存验证流程,并非缓存过期,目的是在节省带宽的同时确保资源有效性。
CDN缓存的特殊说明
CDN节点存在缓存更新机制,可能影响观测结果:
- 图片上传后,CDN节点需要一定时间(如你遇到的180秒)同步源站资源,此期间不同请求可能获取到不同的响应头;
- 清除缓存后的首次请求会触发CDN拉取最新资源,后续的304是缓存验证的正常结果,符合HTTP缓存规范。
内容的提问来源于stack exchange,提问作者J John
相关产品推荐
相关产品推荐

