直接答案:36 个文章页在响应头里没有一个可以缓存:31 页写 no-store、1 页写 private、4 页没有 Cache-Control;没有任何页面给出正数 max-age。ETag 只有 3 页、Last-Modified 为 0 页,Vary 则有 35 页。
这些页面都返回 200 与 text/html。问题不在“有没有头”,而在指向:no-store 让浏览器与中间缓存都不保留副本,每次访问都要重新取回 HTML。
方法:请求头快照,先 HEAD 后 GET
用第 45 期缓存的 36 个文章页 URL(10 站,HTTP 200、HTML ≥5 KB)重新请求一次响应头:先发 HEAD;若失败、非 2xx 或没有 Content-Type 再发一次 GET。只读响应头,不保存正文。间隔 0.5 秒,单次快照(2026-11-06 13:42–13:44)。
| 项 | 判定 | 边界 |
|---|---|---|
| 可缓存 | max-age 或 s-maxage > 0 | 不看 CDN 边缘策略 |
| no-store | Cache-Control 含 no-store | 不代表 CDN 一定不缓存 |
| 验证器 | 存在 ETag / Last-Modified | 不测试 304 是否返回 |
| 压缩 | HEAD 通常不返回 Content-Encoding | 本期不据此判断压缩 |
结果:no-store 是主流
| 头字段 | 页面数 | 占 36 |
|---|---|---|
Cache-Control 存在 | 32 | 88.9% |
其中 no-store | 31 | 86.1% |
其中 private | 1 | 2.8% |
无 Cache-Control | 4 | 11.1% |
正数 max-age / s-maxage | 0 | 0% |
ETag | 3 | 8.3% |
Last-Modified | 0 | 0% |
Vary | 35 | 97.2% |
Age | 2 | 5.6% |
站点差异:八站统一 no-store
| 站点 | 页数 | Cache-Control | ETag | Vary |
|---|---|---|---|---|
| E03 / E06 / E09 / E14 | 各 5 | 全部 no-store | 0 | 全部 |
| E22 / E23 | 各 5 | 全部 no-store | 0 | 全部 |
| E28 | 1 | no-store | 0 | 无 |
| E26 | 1 | private | 0 | 有 |
| E16 | 3 | 无 | 3 | 有 |
| E19 | 1 | 无 | 0 | 有 |
同一个站点的所有文章页策略一致,说明这是服务器或 CMS 的全局配置,而不是单页设置。E16 是唯一使用 ETag 的站点(3 页),但它没有 Cache-Control;E19 两者都没有,只有 Vary。
与首页缓存 pilot 对比
| 口径 | 首页(第 49 期,25 站) | 文章页(本期,36 页) |
|---|---|---|
| 正数 max-age | 1 | 0 |
| no-store | 8 | 31 |
| 无 Cache-Control | 8 | 4 |
| ETag | 4 | 3 |
| Last-Modified | 4 | 0 |
| Vary | 22 | 35 |
文章页比首页更激进地关闭缓存:no-store 从 8/25 升到 31/36;Last-Modified 一个都没有。两批样本站点不同,只能并列比较。
对验收的启示
- 把“文章页可缓存”写进验收。 36 页 0 个正数
max-age;可要求静态文章给 5–60 分钟浏览器缓存。 - 区分新闻流与文章页。
no-store可能来自全站统一配置,文章页可以单独放宽。 - 至少提供验证器。
ETag只有 3 页、Last-Modified为 0,无法走 304。 - Vary 已经很普及。 35/36 有
Vary,这部分不用改。 - 压缩另测。 本期用 HEAD,
Content-Encoding不可靠,不能据此判断是否压缩。
局限
- 单次快照:2026-11-06 13:42–13:44 的响应头,可能随 CDN 变化。
- HEAD 限制:部分头(如
Content-Encoding)在 HEAD 中缺失,未据此做结论。 - 未测 304:有 ETag 不代表服务器会正确返回 304。
- 不看 CDN:源站头与边缘缓存策略可能不同。
- 10 站 36 页 pilot:不外推行业总体。
数据与复算
匿名数据:equipment-article-cache-headers-2026.csv(36 行 × 18 列:状态、内容类型、Cache-Control 解析结果、max-age、ETag/Last-Modified/Vary/Age、原始 Cache-Control 与错误)。仓库内为 docs/research/2026-11-article-cache-headers.csv。
解析:scripts/article_cache_header_probe.py;单元测试 scripts/test_article_cache_header_probe.py(无网络,9 项)。运行:
python -m unittest scripts.test_article_cache_header_probe
配套:首页缓存与压缩 pilot、首页安全响应头 pilot、响应头 48 小时复测。
数据来源与口径
- URL:第 45 期 36 个文章页(10 站),HTTP 200、HTML ≥5 KB。
- 请求:HEAD 优先,失败再 GET;只读响应头,间隔 0.5 秒。
- 时间:2026-11-06 13:42–13:44。