追踪参数正在把你的缓存切成碎片

同一张图片带上不同的 utm 参数,对 CDN 来说就是不同的资源。营销活动一上线,命中率就莫名下滑。

5 分钟缓存与命中
追踪参数正在把你的缓存切成碎片

要点

默认缓存键包含完整 query string。把 utm_* 这类不影响响应内容的参数从缓存键里剔除,命中率通常立刻回升。

本文目录
  1. 01问题的机制
  2. 02典型症状
  3. 03怎么配置

问题的机制

多数 CDN 默认把完整 URL(含 query string)作为缓存键。这在参数会影响响应内容时是对的,但追踪参数并不影响——加了 utm 的图片和没加的图片,服务端返回的字节完全一样。

/hero.jpg
/hero.jpg?utm_source=weibo
/hero.jpg?utm_source=wechat&utm_campaign=spring
# 三个缓存键,三份完全相同的副本,三次回源

典型症状

  • 命中率在营销活动期间下降,活动结束后回升;
  • 回源流量远高于内容实际更新的频率所能解释的量;
  • 同一个资源在缓存分析里出现多条几乎同名的记录。

别一刀切地忽略全部参数

有些参数是真的影响响应的——图片处理服务的 ?width=800、分页的 ?page=2、API 的过滤条件。全部忽略会导致用户拿到错误的响应。要按白名单或黑名单精确配置,而不是「忽略所有 query」。

怎么配置

各家叫法不同(缓存键规则、query string 处理、URL 归一化),但能力大同小异:指定一组参数从缓存键中剔除,或反过来指定只保留哪些参数。

  • 静态资源:只保留版本参数,剔除其余全部;
  • API 与动态页:用白名单保留真正影响响应的参数;
  • 配置后用实测工具对同一资源带不同参数各请求一次,确认返回的缓存状态是命中。

在你的网站验证

边缘核验带不同参数请求同一资源,看是否命中同一份缓存