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

请求头中设置Cache-Control: max-age=20及非零max-age参数的作用是什么?

请求头中Cache-Control: max-age=xxx(xxx≠0)的作用与行为

Great question—this is one of those Cache-Control nuances that trips up a lot of folks because request and response headers reuse the same directives but serve totally different purposes. Let’s break this down clearly:

核心作用

请求头里的max-age=<seconds>是客户端(浏览器、API客户端等)向缓存层(浏览器缓存、中间代理缓存)提出的要求,翻译成人话就是:

“我只接受缓存时间不超过<seconds>秒的新鲜资源。如果缓存里的资源已经存了更久,别直接给我,去源服务器验证或重新获取;如果还在<seconds>秒以内,直接返回缓存就行。”

这和响应头里的max-age完全相反:响应头的max-age是服务器强制规定缓存的有效期,而请求头的max-age是客户端主动对缓存的新鲜度设限。

具体行为(以max-age=20为例)

根据缓存条目的新鲜度,会触发两种不同的逻辑:

  • 缓存条目新鲜(存储时间<20秒):缓存层直接返回缓存的资源,不会向源服务器发起请求。这个效果看起来和响应头max-age=20生效时类似,但本质是客户端主动允许使用新鲜缓存,而非服务器强制要求缓存。
  • 缓存条目不新鲜(存储时间≥20秒):缓存层会执行和max-age=0相同的逻辑:向源服务器发送验证请求(携带If-Modified-Since或If-None-Match请求头)。如果服务器返回304 Not Modified,缓存层会更新该条目的新鲜度(重新计算有效期)后返回缓存;如果返回200 OK,则用新资源替换缓存并返回给客户端。

关键对比:请求头vs响应头max-age

位置max-age=20的含义
响应头服务器告诉缓存:“这个资源你可以存20秒,20秒内直接返回给请求方”
请求头客户端告诉缓存:“我只接受20秒内的新鲜缓存,超过20秒的必须去源服务器验证或重新获取”

举个实际例子:如果服务器响应头设了max-age=60,但客户端请求头设了max-age=20,那么缓存层只会返回存储时间≤20秒的资源;一旦缓存超过20秒,就会去源服务器验证,不会遵守服务器规定的60秒有效期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:17:31