对照404notfound在测试环境与线上的差异,核心不是比谁“报错更多”,而是用同一批URL、同一套请求头、同一份跳转与状态码规则,分别记录两边返回的HTTP状态码和响应来源,再逐条判断差异是配置不一致、内容未同步,还是路由规则不同。交付时应留下可复现的URL清单、两边原始响应、差异结论和修复责任,避免口头描述“我这边是好的”。
404notfound通常出现在三类场景:已删除页面、拼写错误的URL、内部链接指向了不存在的路径。测试环境与线上要对照的,正是这些具体URL在两边分别返回什么。先建立一份对照清单,每行至少包含:完整URL、来源页面或入口、期望结果、测试环境状态码、线上状态码、备注。期望结果要写清楚是返回404、301跳转到新地址,还是410表示永久移除。没有期望结果,差异就无法判断对错。
如果两边都有自定义404页面,还要记录页面模板是否一致、是否返回了正确的状态码。有些站点返回了404页面内容,但HTTP状态码是200,这会让搜索引擎把不存在的页面当成正常页面处理。测试环境和线上都应单独检查这一项。
浏览器地址栏访问只能看到页面,看不到状态码和响应头。对照时应使用命令行工具分别请求两边地址。例如:
curl -I https://测试环境域名/不存在的路径
curl -I https://线上域名/不存在的路径
把两次输出的第一行状态码、Location响应头、Content-Type记录下来。测试环境如果加了访问密码或IP限制,先确认请求能正常到达应用,否则拿到的401或403不能当作404差异。对需要登录才能访问的路径,还要用相同身份或相同Cookie对照,否则一边跳登录页、一边返回404,差异来源就不是404规则本身。
两边结果不一致时,按以下顺序排查,不要直接断定是某一方配置错误:
每排除一项,就在对照清单里写明依据,例如“两边服务器配置文件的location段一致”或“线上CDN已刷新后仍返回404”。这样交付时别人能复核,而不是只看到结论。
多人协作时,404对照最容易返工的地方是责任不清。建议在任务开始前就约定:谁提供URL清单,谁负责测试环境抓取,谁负责线上抓取,谁判断差异原因,谁修改配置,谁做最终验收。验收标准可以写成三条:清单中每一条差异都有明确原因;每条原因对应一个责任人和修改动作;修改后两边对同一URL返回相同状态码和相同跳转目标。
如果差异涉及跳转,还要额外确认跳转链没有形成循环,且最终目标返回200。跳转链过长或指向另一个404,都属于未通过验收。对于确认要移除的页面,404只是其中一种处理方式;如果希望更快从搜索结果中消失,robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这两点不能替代对状态码和页面可访问性的实际检查。
假设线上一个旧活动页返回301到新活动页,测试环境同一路径返回404。此时先不要改测试环境去模仿线上,而要确认测试环境是否缺少该跳转规则,还是该页面在测试环境本来就不存在。如果产品要求两边行为一致,就以线上规则为基准补齐测试环境配置;如果测试环境本就用于验证下线流程,则应把期望结果改为404,并单独记录线上跳转是历史遗留。判断依据是业务预期,不是哪边“看起来更对”。
下一步,拿一份现有URL清单,按上面的字段补齐测试环境和线上响应,先跑通十条再决定是否扩大范围。差异记录能复现、责任能落到人,404对照才算交付清楚。