先给结论:源站返回404是预期结果,边缘节点却返回200、301或5xx时,最该保留的是“同一URL、同一时刻、两条链路各自的完整响应证据”,而不是只截一张浏览器图。下面用一个假设情境把决策过程走完。
假设你维护一个已下线内容的404页面策略:源站对已删除URL统一返回404,并附带自定义错误页。抽检十个URL时,源站与CDN边缘节点表现一致,于是你认为配置已经生效。批量提交几千个URL后,监控出现两类例外:一部分URL在边缘节点返回200并展示旧内容,另一部分返回301跳向首页。源站日志显示这些请求到源站时仍是404。此时问题不在源站,而在边缘层,需要先固化证据再决定动作。
对每个异常URL,分别直连源站和经边缘节点发起请求,记录以下字段:请求时间、完整URL、请求方法、响应状态码、响应头中的缓存相关字段、内容长度、响应体前若干字节或哈希。两边必须使用同一URL和同一方法,否则对比不成立。
如果只保留边缘侧截图,你无法排除源站当时确实返回过200;如果只保留源站日志,你无法解释用户实际收到什么。两者缺一,后续动作都可能是猜的。
边缘节点异常最常见的原因是缓存键设计过宽或过窄。假设某站点把查询参数全部纳入缓存键,而旧URL带有一批已废弃参数,边缘就会为每个变体单独缓存一份200。反过来,如果缓存键忽略了区分内容版本的字段,不同版本可能互相覆盖。
需要保留的证据包括:该URL命中的缓存键构成、缓存年龄、上次回源时间、回源请求是否携带了与用户请求一致的头部。这些信息能回答一个关键问题:异常是“缓存里存着旧结果”,还是“每次回源都被边缘改写”。两者的处理动作不同——前者需要清理或调整缓存键,后者需要检查边缘规则本身。
一个可操作的动作是:先对少量异常URL执行缓存刷新,再立即重新请求并记录结果。如果刷新后恢复404,说明问题集中在缓存层;如果刷新后仍返回200或301,说明边缘规则或回源链路存在改写,需要继续查规则配置。这个动作的结果直接决定你是走缓存治理还是走规则排查。
边缘节点异常还有一类容易误判的情况:请求根本没有按你以为的路径到达源站。例如边缘节点配置了回源重试、备用源站或本地兜底页面,用户看到的200可能来自兜底内容,而不是源站。
保留证据时要注意:
如果边缘日志显示回源成功拿到404,但用户侧收到200,那么改写发生在边缘返回阶段;如果边缘日志显示回源请求根本没发出,那么问题在边缘路由或规则匹配。这两种结论指向不同的负责人和不同的修复窗口。
抓取工具的统计归零、某个监控面板显示404数量下降、站点地图中该URL消失,这些现象都不能单独证明边缘处理正确。它们还有别的合理解释:抓取频率变化、监控采样口径调整、站点地图更新延迟。把这类信号当作结论,容易在真正异常仍然存在时提前收工。
同样,robots.txt中的抓取限制不等于可靠的索引移除,HTTPS也不保证边缘节点不会返回错误状态。这些事实影响的是你对“问题是否已解决”的判断边界,而不是替代响应证据本身。
假设你要向边缘服务方或内部平台团队提交问题,最小证据集合可以这样组织:
这套集合的作用不是证明谁对谁错,而是让下一个动作有依据:刷新后恢复的走缓存治理,刷新后不恢复的走规则排查,回源未发出的走路由排查。证据保留得越完整,后续每一步的取舍就越不依赖猜测。