参考资料

  1. "GET" "POST" "PUT" "DELETE" "PURGE" "HEAD" "OPTIONS" "PATCH"})
  2. 阿里云 ESA 的 SNI 白名单功能的核心机制
  3. _acme-challenge.madama.cnDNS 直接解析madama.cn.118555529491327488.dcv.aliyun-esa.com,申请失败
  4. HTTP/2 和 HTTP/3 是给访客用的,HTTP/2 回源是给源站用的
  5. 强制校验源站服务器返回的 SSL/TLS 证书是否合法有效
  6. 错误 net::err_blocked_by_response 通常表示浏览器收到了来自服务器的响应,但拒绝了它
  7. OCSP Stapling 功能可实现由 ESA 预先缓存在线证书验证结果并下发给客户端,无需浏览器直接向 CA 站点查询证书状态,从而减少用户验证时间。
  8. 开启 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/