You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求与响应Cache-Control max-age差异及请求max-age=0与其他值区别

请求与响应max-age不同时的缓存行为,及请求头max-age=0与其他值的区别

先理清两个max-age的核心作用

  • 响应头Cache-Control: max-age=3600:服务器告知浏览器,该资源的缓存新鲜期为3600秒——在此期间内,缓存处于「新鲜状态」,浏览器可直接使用,无需与服务器通信。
  • 请求头Cache-Control: max-age=XXX:浏览器告知服务器,仅接受新鲜时长不超过XXX秒的缓存。注意:这并非浏览器直接判定缓存过期的阈值,而是触发条件请求的规则。

你遇到的场景解析

当服务器响应max-age=3600,浏览器请求头设max-age=60时:

  1. 缓存创建后的60秒内:缓存新鲜时长≤60秒,符合浏览器要求,直接使用缓存,不发起请求。
  2. 60秒后到3600秒内:缓存新鲜时长超过60秒,但仍在服务器规定的3600秒新鲜期内。此时浏览器不会直接丢弃缓存,而是发送条件请求(携带If-Modified-Since或If-None-Match头),询问服务器资源是否更新。
    • 若服务器返回304 Not Modified,浏览器继续使用现有缓存;
    • 若服务器返回新资源(200状态),则替换缓存并使用新内容。
      你看到的「仍在使用缓存」,实际是服务器返回304后复用了缓存,而非浏览器直接跳过验证步骤。

请求头max-age=0与max-age=N(N>0)的核心区别

1. max-age=0的行为

无论缓存处于何种状态(哪怕刚创建1秒),浏览器都会强制发送条件请求到服务器验证缓存有效性:

  • 服务器返回304,就继续使用缓存;
  • 服务器返回200,则更新缓存并使用新资源。
    你所说的「不使用缓存」,本质是它不会直接读取本地缓存,必须先经服务器验证,而非完全弃用缓存。

2. max-age=N(N>0)的行为

浏览器会先计算缓存的新鲜时长(当前时间 - 资源响应时间):

  • 若新鲜时长 ≤ N:直接使用本地缓存,不与服务器通信;
  • 若新鲜时长 > N,但缓存仍在响应头的max-age范围内:发送条件请求验证,验证通过则复用缓存;
  • 若缓存已超过响应头的max-age:直接视为过期缓存,发送条件请求(或按其他缓存规则处理)。

关键总结

  • 请求头max-age=N(N>0)是「允许直接使用的缓存最大新鲜时长」,阈值内直接用,超阈值则验证;
  • 请求头max-age=0是「强制验证缓存」,不管缓存多新,都要先确认服务器端资源是否可用。

内容的提问来源于stack exchange,提问作者M7mod Bakr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:45:34