追踪参数正在把你的缓存切成碎片
同一张图片带上不同的 utm 参数,对 CDN 来说就是不同的资源。营销活动一上线,命中率就莫名下滑。
5 分钟缓存与命中

要点
默认缓存键包含完整 query string。把 utm_* 这类不影响响应内容的参数从缓存键里剔除,命中率通常立刻回升。
问题的机制
多数 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 与动态页:用白名单保留真正影响响应的参数;
- 配置后用实测工具对同一资源带不同参数各请求一次,确认返回的缓存状态是命中。
在你的网站验证
边缘核验带不同参数请求同一资源,看是否命中同一份缓存