首页/网络/协议速查/Age 缓存年龄
HTTP 头与缓存70 条

Age 缓存年龄

由缓存生成的响应头:表示该响应在到达客户端前,已经在(共享)缓存中存放了多少秒。

协议速查网络更新于 2026-10-13

Age 表示响应在缓存里待了多久

Age 由缓存(代理、CDN、网关)添加,表示该响应在到达客户端之前已经在共享缓存中存放了多少秒。它是判断「有没有命中缓存」最直接的证据:新鲜度计算把 Age 与 Date 一起和 max-age 比较,Age 越大说明拿到的是越旧的副本。Age 为 0 或缺失通常意味着刚刚回源。

基本信息

方向响应头,由缓存生成
规范RFC 9111 §5.1
取值非负整数,单位为秒
作用参与新鲜度判断:当前年龄超过 max-age 即视为陈旧
配套头Cache-Control、Date、Expires、X-Cache 等命中标记

结合其它头一起读

响应头含义判读要点
Age: 0刚回到源站或刚写入缓存通常伴随 X-Cache: MISS
Age 接近 max-age缓存副本即将过期下次请求大概率回源
s-maxage共享缓存的最大新鲜期CDN 优先于 max-age
X-Cache厂商自定义命中标记HIT 与 MISS 是排查缓存命中的快车道

判断命中与新鲜度

判断命中与新鲜度
curl -sI https://cdn.example.com/img.png | grep -iE '^(age|cache-control|date|x-cache|expires)'
# age: 120
# cache-control: max-age=3600
# x-cache: HIT
# 说明副本已存在 120 秒,距离过期还有 3480 秒
curl -sI https://cdn.example.com/img.png?nocache=1 | grep -i x-cache   # 换 URL 验证回源行为

典型使用场景

  • 确认 CDN 是否真的命中,避免以为配置生效却一直回源
  • 排查「内容不更新」:Age 很大说明拿到的是较旧副本,结合 max-age 与刷新策略分析
  • 容量评估:命中率低会直接抬高源站压力与成本
  • 验证刷新接口是否生效:刷新后 Age 应重置
Age 很大说明命中了较老的副本,排查「内容不更新」时要结合 s-maxage 一起看:源站的 max-age 与 CDN 的 s-maxage 不一致时,实际生效的是共享缓存那一档。
私有缓存(浏览器)不会发送 Age,看到 Age 就意味着链路中间存在共享缓存;同一响应在不同地区可能命中不同节点,Age 表现会不一致。
计算新鲜度时要连 Date 一起看:新鲜度寿命减去响应从源站到缓存已经消耗的时间,才是还剩多少可缓存的秒数,只比较 Age 与 max-age 会算错边界。

易错点

  • 把 Age 当成响应时间:它表示在缓存里存放了多久,与服务器处理耗时无关,混用会让延迟分析得出反向结论
  • 只看 X-Cache 不看 Age:部分厂商的 X-Cache 标记在合并节点后不准,Age 才是标准字段
  • 缓存未设置 Vary 导致个性化内容被共享缓存:Age 增长的同时用户看到别人的内容,属于严重串号事故
  • 认为刷新是瞬时的:CDN 多节点刷新有传播延迟,刚刷新时 Age 可能仍然很大,需要按节点确认

数据来源与参考

  • RFC 9111 §5.1 Age

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌