先给结论:不要从最外层缓存开始清,而要先确定“哪一层先产生差异”。域名估价方法本身不涉及缓存,但估值页面、行情接口和报告下载往往同时经过浏览器缓存、CDN、反向代理和应用内缓存;当不同层返回不同版本时,定位一致性问题的关键是固定一个可复现的请求,再逐层比对响应头、正文摘要和缓存键,而不是凭页面刷新结果猜哪层坏了。
两种做法都成立,但适用条件不同。若同一 URL 在不同地区、不同网络下返回不同内容,优先从边缘查;若所有入口都返回同一份旧内容,优先从源站和应用缓存查。
一个实际动作是:给同一路径加一个仅用于诊断的查询参数,例如 ?debug=1,分别请求边缘节点和源站,记录响应中的 Age、Cache-Control、ETag 与正文摘要。如果带参数后边缘返回新版本,说明缓存键没有纳入该参数;如果带参数后仍然返回旧版本,问题更可能在源站或应用缓存。这个结果会直接决定下一步是改缓存规则还是查发布链路。
多层缓存返回不同版本时,最常见的误判是把发布失败当成缓存未刷新。两者可以用一组可区分证据判断。
Age 大于零。此时应核对缓存键、TTL 和清除范围。假设一个场景:估值报告页的页脚版本号在 A 网络显示为新,在 B 网络显示为旧。若 A 网络请求源站也是新,而 B 网络边缘响应的 Age 很大,那么优先处理 B 网络对应节点的缓存规则;若源站本身也返回旧页脚,则应先查发布任务,而不是继续清 CDN。这个判断能避免把时间花在错误的一层。
并非所有版本差异都来自缓存。以下原因也会造成同一路径返回不同内容:
要排除这些解释,可以固定一个不带登录态、不带个性化 Cookie 的请求,连续请求同一路径多次,记录每次命中的节点标识和正文摘要。如果摘要稳定但版本旧,偏向缓存;如果摘要随机变化,偏向多源站或多实例不一致。只有确认差异确实由缓存层引起,统一缓存键才有意义。
定位到具体层后,动作顺序会影响代价。全量清除边缘缓存通常最快,但会带来回源压力和短暂的不稳定;只清除问题路径则更安全,但要求缓存键和路径规则足够清晰。
可执行的顺序是:
例外情况是:当页面包含用户个性化内容时,不应为了统一版本而把缓存键收敛到忽略 Cookie,否则可能把不同用户的内容混在一起。此时更合适的做法是只缓存公共部分,个性化部分改为客户端请求或独立接口。
验证时不要只看页面肉眼是否变化。更可靠的依据是同一请求下的响应头组合、正文摘要和资源版本号。可以按以下清单核对:
ETag 是否一致。Cache-Control 的 max-age 与 s-maxage 是否被中间层改写。需要说明的是,请求量或抓取量归零不能单独证明缓存处理正确,它也可能是流量下降、监控口径变化或请求被拦截所致。判断一致性应回到可复现的请求和响应证据,而不是单一统计指标。
把上述步骤连起来:先用一个固定请求确认差异发生在哪一层,再用响应头区分缓存旧副本与发布失败,最后按影响范围选择单 URL 清除或缓存键收敛。这样处理多层缓存版本不一致时,才能把动作落在真正产生差异的那一层,而不是在每一层重复试错。