CacheKey 是 CDN 节点用来判断「两个请求是否命中同一份缓存」的标识
参考资料
- "GET" "POST" "PUT" "DELETE" "PURGE" "HEAD" "OPTIONS" "PATCH"})
- 阿里云 ESA 的 SNI 白名单功能的核心机制
- _acme-challenge.madama.cnDNS 直接解析madama.cn.118555529491327488.dcv.aliyun-esa.com,申请失败
- HTTP/2 和 HTTP/3 是给访客用的,HTTP/2 回源是给源站用的
- 强制校验源站服务器返回的 SSL/TLS 证书是否合法有效
- 错误 net::err_blocked_by_response 通常表示浏览器收到了来自服务器的响应,但拒绝了它
- OCSP Stapling 功能可实现由 ESA 预先缓存在线证书验证结果并下发给客户端,无需浏览器直接向 CA 站点查询证书状态,从而减少用户验证时间。
- 开启 HSTS 后,可以减少第一次访问被劫持的风险,ESA 将响应 HSTS 头部:Strict-Transport-Security。
CacheKey 是 CDN 节点用来判断「两个请求是否命中同一份缓存」的标识
什么是 CacheKey
CacheKey 是 CDN 节点用来判断「两个请求是否命中同一份缓存」的标识。默认情况下,CacheKey 通常由 URL(含查询字符串) 组成。自定义 CacheKey 就是让你决定:哪些请求信息参与缓存键的计算,从而控制缓存的区分粒度。
各项配置说明
1. 对查询字符串排序
是:
?a=1&b=2和?b=2&a=1视为同一个缓存键。否:顺序不同则视为不同缓存键。
作用:避免因参数顺序不同导致重复缓存,提高命中率。
2. 查询字符串处理方式
| 选项 | 含义 |
|---|---|
| 全部忽略 | 查询参数不参与 CacheKey,?a=1 和 ?a=2 命中同一缓存 |
| 全部保留 | 所有查询参数都参与 CacheKey(默认) |
| 删除指定查询字符串参数 | 排除某些参数(如 utm_source、timestamp 等营销/随机参数) |
| 保留指定查询字符串参数 | 只让指定参数参与 CacheKey,其余忽略 |
典型场景:把
utm_*、gclid等跟踪参数删除,避免同一内容被缓存多份。
3. HTTP 请求头
让指定请求头参与 CacheKey:
包括这些标头名称及其值:如
accept-language,值不同则缓存不同。检查是否存在:只看该标头是否存在,不看具体值。
注意:标头名称英文只能小写。多个值按回车确认。
4. Cookie
同理,让指定 Cookie 参与 CacheKey:
包括名称及其值:值不同 → 不同缓存。
检查是否存在:只看是否存在该 Cookie。
名称也要求小写。常用于按登录态、会员等级等区分缓存。
5. 用户维度
| 维度 | 说明 |
|---|---|
| 设备类型 | 根据 User-Agent 识别 desktop / tablet / mobile,按设备分隔缓存(常用于响应式/移动端适配) |
| 国家/地区 | 根据访问者 IP 归属地分隔缓存(多地区内容不同时使用) |
| 语言 | 根据访问者语言分隔缓存 |
6. 缓存欺骗防御
防止攻击者通过构造特殊 URL(如伪装成静态资源的动态页面)诱导 CDN 缓存敏感内容,从而被他人访问到。开启后可避免这类「缓存欺骗(Web Cache Deception)」攻击。
配置建议(常见组合)
纯静态资源:查询字符串「全部忽略」+ 对查询字符串排序 = 是 → 命中率最高。
带营销参数的页面:删除
utm_*、fbclid等参数。多端适配站点:勾选「设备类型」。
多语言站点:勾选「语言」或把
accept-language加入请求头。涉及登录态的接口/页面:不要把 Cookie 随意加入缓存键,且务必开启缓存欺骗防御,避免缓存私有数据。
如果你告诉我具体的使用场景(静态资源 / 动态页面 / 多语言 / 多端),我可以帮你给出一套具体的 CacheKey 配置方案。
时间:2026-09-29 10:28:39
来源:https://yun.ciilii.com/
