速读摘要:百度云防护 Web 应用防火墙(WAF)缓存功能再次升级——新增”忽略源站不缓存标头”开关。开启后,WAF 将强制忽略源站返回的
Cache-Control: no-store、no-cache、max-age=0以及Pragma: no-cache等”不缓存”指令,一律按控制台规则强制缓存。这一更新彻底解决了长期以来恶意爬虫通过伪造no-cache: 0或max-age=0响应头绕过 WAF 缓存规则、刷回源量的顽疾,对中小网站尤其友好。

一、长期痛点:恶意爬虫用 no-cache 绕过 WAF 缓存
很多站长都遇到过这种”诡异”的现象:
- WAF 控制台明明配置了静态资源缓存 30 天,但实际命中率只有 20%;
- 看回源流量明细,同一个文件被反复回源拉取——明明是同一个 URL、同一个 IP 段;
- 关掉 WAF 缓存规则后回源量反而没变化——证明 WAF 缓存根本就没生效。
1.1 罪魁祸首:HTTP 协议里的”不缓存”指令
按照 HTTP 规范,源站可以通过响应头告诉中间缓存节点”不要缓存我”。常用的几个:
| 响应头 | 含义 | 攻击者如何利用 |
|---|---|---|
Cache-Control: no-store |
完全不缓存 | 直接跳过 WAF 缓存,全部回源 |
Cache-Control: no-cache |
每次都要回源校验 | 即便 WAF 想缓存也必须回源校验 |
Cache-Control: max-age=0 |
立即过期 | 缓存 0 秒,等于不缓存 |
Pragma: no-cache |
HTTP/1.0 时代的”不缓存” | 老旧爬虫还在用这个头 |
1.2 恶意爬虫的”绕过姿势”
更让人头疼的是:很多攻击者/爬虫会伪造响应头来”骗”过 WAF 缓存:
- 控制客户端发自定义请求头,让服务端返回带
no-cache的响应; - 抓取目标源站的真实响应(本身就有
no-cache头),转发给 WAF 校验逻辑; - 频繁变更请求 URL 参数(
?v=123、?_t=timestamp)让 WAF 视作”新请求”无法命中缓存。
效果就是:明明开启了缓存,实际命中率就是上不去,源站被打爆。这种情况在新闻类、招聘类、内容聚合类站点尤为明显。
二、新功能:忽略源站不缓存标头
百度云防护 WAF 在最近的版本更新中,新增了“忽略源站不缓存标头”开关。开启后,WAF 在缓存决策时不再看源站返回的 no-store、no-cache、max-age=0、Pragma: no-cache,统一按控制台配置的缓存策略执行。
2.1 开启方式
路径:百度智能云控制台 → 云防护 → Web 应用防火墙 → 网页防篡改 → 选择规则 → 编辑 → 缓存设置 → 找到”忽略源站不缓存标头“开关 → 打开。
上图红框标注的就是这个开关位置。打开后右侧会变成蓝色,并伴随一个 ⓘ 提示”开启后将忽略源站 no-store/no-cache/max-age=0 指令”。
2.2 开关开启后行为
| 源站响应 | 关闭时 WAF 行为 | 开启后 WAF 行为 |
|---|---|---|
Cache-Control: no-store |
不缓存 | 强制按控制台规则缓存 |
Cache-Control: no-cache |
每次回源校验 | 强制按控制台规则缓存 |
Cache-Control: max-age=0 |
立即过期 | 强制按控制台规则缓存 |
Pragma: no-cache |
不缓存 | 强制按控制台规则缓存 |
Cache-Control: max-age=3600 |
按 3600 秒缓存 | 按 3600 秒缓存(不变) |
Cache-Control: public, max-age=86400 |
按 86400 秒缓存 | 按 86400 秒缓存(不变) |
无 Cache-Control 头 |
按控制台规则缓存 | 按控制台规则缓存(不变) |
也就是说:只忽略”不缓存”的指令,不会改变正常的缓存策略。这是一个非常克制的设计——只解决”被恶意绕过”的问题,不影响”正常协商”。
三、为什么这个功能值得关注?
3.1 直接收益
- 缓存命中率提升:实测开启后静态资源命中率从 20% 提升到 85%+(视业务而定);
- 回源量下降:相同 IP/UA 的反复访问基本都命中 WAF 缓存,回源量可以下降 60% 以上;
- 源站 CPU 压力缓解:典型场景——新闻站首页 HTML、图片 CDN 域名,可以直接把”被恶意刷的回源请求”挡在 WAF 这一侧;
- 抗 CC 能力提升:对”伪装成不同 URL 刷同一份文件”的攻击,结合 WAF 缓存策略可实现”重复请求零回源”。
3.2 适用场景
- 新闻资讯 / 博客类:静态文章 HTML、图片资源;
- 招聘 / 房产信息类:列表页、详情页内容高度可缓存;
- 企业官网:产品介绍页、案例页;
- API 网关加速:GET 请求 + 幂等接口;
- CDN 加速域名:源站本身可能误带
no-cache,WAF 这层覆盖。
3.3 注意事项
- 不能完全替代源站 HTTP 头规范:源站仍应按业务合理设置
Cache-Control,WAF 这个开关只是兜底; - 登录态页面(如
/user/center、/order/list)不要走 WAF 缓存规则,更不要打开这个开关,否则会把用户私有页面缓存给所有人; - 对带有
Set-Cookie的响应保持谨慎:WAF 默认会跳过带 Cookie 的响应缓存,开启此开关也不会改变这个行为; - 灰度验证:建议先在测试站开启、观察 24 小时命中率曲线,确认业务正常后再全量灰度。
四、配合使用的最佳实践
4.1 推荐的 WAF 缓存策略(以”招聘/资讯类网站”为例)
| 路径模式 | 缓存有效期 | 忽略不缓存标头 | 说明 |
|---|---|---|---|
*.html、*.htm |
1 小时 | 开启 | 列表/详情页 |
*.css、*.js |
30 天 | 开启 | 静态资源 |
*.jpg、*.webp、*.png |
30 天 | 开启 | 图片资源 |
/api/*(GET) |
1 分钟 | 关闭 | 准实时接口 |
/user/*、/admin/* |
0(不缓存) | — | 私有路径 |
4.2 Nginx 兜底配置(无 WAF 场景)
如果你还没上 WAF,可以临时在 Nginx 上把”恶意 no-cache”头过滤掉:
