源站 favicon 已经换成新的,打开站点还是旧图,直接打源站拿到的是新文件,走 CDN 域名返回的 ETag 是三天前的。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

curl -sI https://cdn.example.com/favicon.ico | grep -i etag
curl -sI https://example.com/favicon.ico | grep -i etag

CDN 按 URL 缓存,图标文件名没变就不会回源,热身也没覆盖到这个后缀。有些 CDN 对 ico 的默认缓存时间是 30 天。这一点先确认清楚,后面就不用反复试。

「CDN 图标缓存」这类改动最怕改一半,回滚脚本先准备好,再动生产。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

具体做法是,换文件名或者加版本参数 让 URL 变掉;在 CDN 控制台对图标路径提交刷新;调整 ico png 这类后缀的缓存规则;从两个地区各 curl 一次确认都是新文件。

改完照着核一遍,CDN 和源站返回的 ETag 一致 浏览器里显示的是新图标。

作者 9823189