先给结论:源站返回正常,不代表边缘节点正常。此时最该保留的不是“源站截图”,而是能证明异常发生在边缘侧的原始响应、节点标识与时间线。具体要留四类证据:带节点信息的响应头、同一URL的对照请求记录、缓存状态与年龄字段、以及异常发生前后的变更记录。缺少其中任何一类,后续处理都可能变成猜谜。
假设你有一个商品详情页,源站直连返回200,正文完整;但通过CDN访问时,部分用户看到旧价格或旧库存。你要做的第一个动作,是固定一个URL,分别从源站和边缘节点各取一次响应,并把完整响应头和响应体保存下来。不要只截图页面,截图无法证明缓存层级。
保存时至少记录:请求时间(精确到秒)、请求URL、请求使用的解析结果或节点IP、HTTP状态码、响应头中的缓存相关字段、响应体前若干字节的哈希或摘要。这样做的结果是,你能判断两次响应是内容不同,还是仅头部不同。如果内容摘要一致而头部不同,问题更可能在头部处理或缓存策略;如果内容摘要不同,才需要继续查边缘节点上的副本。
很多CDN会在响应头里写入节点编号、缓存状态、命中层级或回源标记。字段名因服务商而异,常见的有 X-Cache、X-Cache-Status、Age、Via、X-Served-By 等。你要保留的是原始字段名和值,不要只写“显示命中”。如果响应头里没有节点信息,就记录你请求时解析到的IP,并注明这是解析结果而非节点自报。
这一步的实际影响是:如果后续发现异常只出现在某一个节点编号上,处理范围就能从“全站缓存异常”缩小到“单节点或单节点组异常”。反之,如果所有节点都异常,才需要怀疑全局配置或源站回源链路。
对照请求必须尽量同时进行,间隔越短越好。记录源站响应和边缘响应时,要保留完整的请求方法、请求头中的 Host、Accept-Encoding、Cookie 是否存在,以及是否带了绕过缓存的查询参数。很多人只对比正文,忽略了请求头差异,结果把“带Cookie回源”和“不带Cookie命中缓存”误判为节点异常。
如果源站正常而边缘异常,对照记录应能回答三个问题:边缘返回的是旧副本还是错误副本;边缘是否回源;边缘响应中的 Age 是否在增长。假设源站返回 Age 缺失,边缘返回 Age: 86400,且内容为一天前的版本,那么证据指向边缘缓存了一份过期副本,而不是源站输出错误。这个判断会直接影响下一步:是先刷新该节点缓存,还是先检查缓存规则。
单次请求只能说明一个瞬间。你要对同一URL做至少三次采样,间隔可以设为几分钟,记录每次的节点标识、缓存状态和 Age。如果 Age 持续增加但内容不变,说明边缘在持续使用同一份副本;如果 Age 重置但内容仍是旧的,说明回源后拿到的仍是旧内容,问题可能不在边缘节点本身。
这里要避免一个常见误判:Age 大不等于异常,只说明副本存在时间较长;真正需要关注的是内容与源站当前版本是否一致,以及缓存规则允许的TTL是否已经超过。把这两点分开记录,后续处理才不会把正常长缓存当成故障。
保留异常发生前后的变更记录,包括缓存规则调整、回源配置变更、证书或域名解析变更、源站发布记录。没有变更记录,时间线就只能靠猜测。同时列出一份受影响URL清单,至少包含首页、栏目页、详情页、静态资源各一个代表,并标注每个URL的异常表现:旧内容、错误状态码、内容截断或头部异常。
这份清单的作用是决定处理顺序。如果异常集中在某一类URL,优先检查该类URL的缓存规则;如果所有类型都异常,优先检查全局配置或节点组。动作的结果会直接改变下一步:局部异常适合定点刷新,全局异常则需要先暂停相关缓存规则再排查。
这些材料可以作为辅助,但必须和前面的四类证据放在一起看。特别是清除缓存后恢复这一现象,还需要确认恢复的是同一节点、同一URL和同一响应头字段,否则无法排除其他解释。
当你手里有了节点标识、对照响应、连续采样和变更记录,处理方案就不再是“先清缓存试试”。可以按以下顺序推进:
Age 和内容是否同步更新。整个过程中,证据的价值不在于数量多,而在于能区分“源站问题”“边缘副本问题”“回源链路问题”和“规则配置问题”。保留正确的证据,下一步动作才有明确指向;保留错误的证据,只会让排查在清缓存和刷新页面之间循环。