这个坑值得记一笔。CDN 开了图片压缩,响应头里的 Content-Length 还是原图大小,蜘蛛按长度读取时提前断开,图片报告里大量抓取失败,缩略图在结果里显示不全。

排查方向其实有限,先把可能性排一排。压缩在边缘完成,Content-Length 由源站头原样透传;图片改成 chunked 后部分节点仍返回旧头;源站和边缘各做了一次 gzip。

第一件事是对比头部长度和实际字节数

curl -s https://www.example.com/img/a.jpg -o /tmp/a.jpg -D - | grep -i content-length && wc -c /tmp/a.jpg

随后看是否走了分块传输

curl -sI https://www.example.com/img/a.jpg | grep -i transfer-encoding

剩下的就是关掉重复压缩后测下载大小

curl -s -o /dev/null -w '%{size_download}\n' https://www.example.com/img/a.jpg

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

别只看报错消失,验证要多做一步。头长度和实际字节一致后,图片抓取失败条数一周内归零。

容易忽略的是,边缘改写内容必须同步改写长度或改用 chunked,两个头打架时蜘蛛只会读到半张图。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189