先做一件事:把同一个百度推广URL在“浏览器直接访问、CDN节点、源站回源”三个位置各取一份响应,比较状态码、Content-Length、Last-Modified或ETag以及落地页首屏可见文案。若三份不一致,问题通常不在“缓存有没有开”,而在“哪一层缓存拿到的版本被谁改写、又按什么键存储”。定位一致性的关键不是清空所有缓存,而是先确定差异出现在哪一层、由什么请求头或回源路径触发。
面对多层缓存返回不同版本,常见的两种动作是:对CDN做全量刷新,或先固定源站版本再逐层验证。两者成立条件不同。
判断依据可以看一个信号:刷新后立即取同一URL,如果几分钟内又出现两个版本,说明问题在生成或回源环节,不在缓存过期时间。此时继续刷新没有意义,应转向逐层固定版本。
假设你手上有一个百度推广URL,落地页在不同网络下看到的表单按钮文案不同。可以按下面顺序取样本,每一步只改一个变量:
curl -I请求该URL,观察是否返回Age、X-Cache一类字段,判断响应是否来自中间缓存。这个动作的结果会直接决定下一步:如果追加参数后版本改变,下一步应统一缓存键规则,而不是继续刷新;如果源站本身就返回两个版本,下一步应查源站的应用逻辑或发布流程。
不同原因留下的证据不同,可以据此排除:
User-Agent或Accept-Language,且返回不同版本。说明某层在回源时改写了请求头。请注意,请求量或抓取量归零不能单独证明某一层处理正确,也可能是采集方式变化、访问限制或统计口径调整。需要结合响应头和源站日志一起判断。
假设某推广URL为https://example.com/landing,CDN缓存键默认忽略查询参数。平台在点击时附加?from=baidu。此时带参数和不带参数请求命中同一个缓存副本,但源站可能按参数返回不同文案。若先刷新CDN,边缘节点会回源取到其中一个版本并缓存;随后另一批带不同参数的请求仍命中同一副本,于是继续出现版本不一致。更稳妥的动作是:先确认平台是否必须附加参数,再决定是让缓存键包含该参数,还是在源站层面对参数做统一处理。这个例子的前提是缓存键规则可配置,若不可配置,则应改为在源站输出稳定版本,避免依赖中间层区分。
一致性问题的收尾不是“清一次缓存”,而是让缓存键、回源请求头和发布流程三者对齐。可执行的动作包括:记录本次差异涉及的完整URL和请求头组合;在源站日志中标记同一路径的不同响应版本;把缓存键规则与推广URL参数规则写进同一份变更说明。做完这些后,再取一次三份响应,确认状态码、内容长度和首屏文案一致。若仍不一致,重复上面的分层取样,而不是扩大刷新范围。