部分缩略图显示成 0 字节,Content-Length 是 0,状态码却是 200,边缘把这个空响应缓存了七天。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

curl -sI https://cdn.example.com/thumb/8821.jpg | grep -i content-length
# 期望不是 0

裁剪进程处理大图时超时退出,但没有写错误状态,框架照样返回 200 和空 body。边缘只按状态码判断成功,就把空文件存了下来。这一点先确认清楚,后面就不用反复试。

「裁剪返回空文件」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

具体做法是,裁剪服务在输出前校验字节数,为 0 时返回 500;边缘配置不缓存 0 字节响应,或按 Content-Length 过滤;清掉已经缓存的空对象,再重新生成这批缩略图。

改完照着核一遍,抽十张缩略图 Content-Length 都大于 1KB,画面正常。

作者 9823189