这类问题我又碰上了一次。CDN 开了图片自动转换 avif,Chrome 正常显示,蜘蛛请求带 Accept: image/avif 时拿到一张 0 字节的文件,图片搜索里这批图全部消失。

原因不止一个,得分开看。转换服务对首次请求同步处理,超时后返回空文件但状态码仍是 200;缓存把空文件当成功结果存了下来;转换后的 Content-Type 仍是 image/jpeg,解码失败。

带 avif 头复现并看长度

curl -s -H "Accept: image/avif" -o /tmp/a.avif -w "%{size_download} %{content_type}\n" https://static.example.com/a.jpg

随后清理缓存里的空文件

curl -X PURGE https://static.example.com/a.jpg

回退到 webp 或关闭自动转换

curl -X PATCH https://api.cdn.example.com/zones/zone1/settings/image_resize -d '{"format":"webp"}'

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

中途换过一次思路,把范围缩到最小的那一层,反而快了。

怎么算真的好了,看的是同一批现象。带 avif 头的请求返回的 size_download 大于 10KB 且能被解码,图片搜索的展现量在两周内恢复。

格式转换失败往往不报错,返回 200 加空体最难查,监控里要把图片字节数一起看着。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189