同一个详情页,源站返回 148KB,走 CDN 只有 96KB,末尾缺了闭合标签。蜘蛛渲染后把侧栏和正文混在一起,索引里的摘要是导航文字。直连源站、关掉 CDN 都正常,切回去又复现。
一开始怀疑是「压缩模块对已压缩内容又压了一次,尾部数据被丢掉」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。边缘开启了缓冲区上限,超过阈值的响应被直接截断。另一种情况是源站用 chunked 输出,模板在异常分支里没有闭合容器。
不容易想到的是,模板本身标签嵌套错误,截断之后错位被放大成两套正文。
上来先对比源站和边缘返回的字节数与结尾内容
curl -s https://www.example.com/p/1024 | wc -c; curl -s --resolve www.example.com:443:203.0.113.10 https://www.example.com/p/1024 | wc -c
然后检查 HTML 标签是否闭合
curl -s https://www.example.com/p/1024 | tail -c 400
临时关掉边缘压缩做一次对比
curl -s -H 'Accept-Encoding: identity' https://www.example.com/p/1024 | wc -c
修掉模板里未闭合的容器,别依赖浏览器容错
grep -c '</div>' templates/detail.html
改完先别撤,确认这几项。边缘与源站返回的字节数一致,结尾能看到完整的闭合标签,索引里的摘要恢复成正文首段。
浏览器对残缺 HTML 很宽容,所以这种问题在页面上看不出来,只有按字节对比才会露出来。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
