结论先说:如果合作方只是把图片域名整体替换,旧链接通过 301 跳到新域名,那么核对重点是“旧图到新图的对应关系”是否一一成立;但如果对方把图片重新压缩、改名或换了目录结构,301 只能保证页面可达,不能保证你引用的那张图还是原来那张,这时必须逐条比对文件本身。下面给出可执行的核对顺序,以及一个会让整套方法失效的反例。
合作方换域名通常有三种形态,核对成本差别很大:
img.old.com/a/b.jpg 变成 img.new.com/a/b.jpg,路径和文件名不变。核对只需验证跳转和响应状态。/static/ 或 /v2/。需要建立旧路径到新路径的映射表。判断属于哪一种,最直接的动作是抽取一批旧图片 URL,用 curl -I 看返回的状态码和 Location 头。如果返回 301 且 Location 指向的新地址与旧地址仅域名不同,基本可归入第一种;如果 Location 指向一个哈希文件名,就落入第三种。这个动作的结果直接决定下一步:前两种可以批量脚本核对,第三种必须人工或图像比对。
很多人只检查“链接是否还能打开”,这不够。图片迁移后即使能打开,也可能指向了另一张图。建议对每条外链记录以下四项:
image/*,而不是 text/html。后者说明服务器用错误页顶替了图片。假设你有一批合作方提供的图片外链,迁移前记录了每张图的 SHA-256。迁移后抓取新地址并重新计算哈希:哈希一致,说明文件未变,可以放心保留原引用;哈希不一致但尺寸接近,可能是重新编码,需要肉眼确认;哈希不一致且尺寸差异大,应视为换图,重新评估这条外链是否还符合你的引用意图。这里的关键是,哈希只能证明“文件是否相同”,不能证明“这张图在你的页面里是否仍然合适”,后者仍需人工判断。
如果合作方采用按请求动态生成图片的架构,同一 URL 每次返回的字节可能不同,例如根据 Accept 头返回 WebP 或 AVIF,或根据参数裁剪尺寸。此时内容哈希天然不稳定,用哈希核对会得出大量“不一致”的假警报。
这种情况下,正确做法是固定请求条件:统一 Accept 头、统一 User-Agent、不带任何裁剪参数,再比较返回的像素尺寸和关键区域。另一个合理替代是比对图片的感知哈希(如 pHash),它对轻微重编码不敏感,但能识别出内容被替换。要说明的是,感知哈希存在碰撞可能,它降低误报的同时也可能漏掉小幅修改,因此只适合作为筛查,不适合作为最终判定。
迁移期间出现 404、超时或返回空内容,有多种合理解释:DNS 尚未完全生效、新域名 CDN 缓存未预热、对方在灰度切换、旧域名临时下线但保留回滚能力。这些现象单独出现,不能证明对方处理错误,也不能证明你的核对方法有问题。
可区分的证据是:同一批 URL 中,一部分正常返回、一部分失败,且失败集中在某个路径前缀或某个时间窗口,通常指向局部配置问题;如果全部失败且 DNS 解析异常,更可能是域名层面尚未就绪。此时不要急于删除或替换所有引用,而应保留旧记录,等待一个观察周期后再复测。观察周期多长取决于对方给出的迁移窗口,而不是固定天数。
核对完成后,建议先产出一张映射表,字段包括旧 URL、新 URL、状态码、内容是否一致、处理结论。然后按结论分三批处理:
切换后不要立即删除映射表。保留它,可以在对方再次调整域名或路径时复用,也能在出现争议时说明你依据的是哪一次核对结果。整个流程的取舍在于:自动化核对快但可能误判动态图片,人工核对准但成本高,先判断迁移类型再选方法,比默认全量人工或全量脚本都更稳妥。