Chrome 133 引发 net::ERR_CONTENT_LENGTH_MISMATCH 问题的分析与解决
【现象】
最近有用户反馈,在使用 浏览器 访问系统时,部分静态资源请求出现 net::ERR_CONTENT_LENGTH_MISMATCH
错误。
具体现象:
- 页面请求 多个静态资源(HTML/JS/CSS),但部分请求随机失败。
- 每次刷新,失败的资源 不固定,但问题持续发生。
【排查】
介入排查后,发现几个问题
使用 Chrome 131 及以下版本、Edge、Firefox 均无法复现。
升级到 Chrome 133 后,问题立即复现。
ERR_CONTENT_LENGTH_MISMATCH
的常见原因:
- 服务器返回的数据 大小 与
Content-Length
不匹配。 - 数据传输中断,导致客户端未接收完整数据。
- 代理层或防火墙 可能影响数据完整性
因此在网关侧和windows侧同时抓包,发现2个问题
1、nginx返回的数据没有异常
2、在传输几十ms后,数据还没传输完,客户端给nginx发送了FIN,也就是说chrome在数据没有传输完成时,发送了FIN,断开了连接。RST很好理解,nginx接收FIN后,立马close这个连接的socket,后续请求来临时,内核不识别这条连接直接返回RST
同时查看了windows侧抓的包,确认确实是chrome发出的FIN,排除现场防火墙拦截的可能性。
【初步结论】
- Chrome 133 在数据传输未完成时,主动发送 FIN 终止连接,导致 部分静态资源加载失败。
- Edge、Chrome 131 及以下版本均无此问题,升级至 Chrome 133 后,问题立即复现。
- 结论:Chrome 133 的 TCP 处理逻辑存在 Bug,并非 Nginx 或防火墙导致的问题。
【Bug 反馈 & 官方响应】
- 我在 Chromium Bug Tracker
- 但是发现该问题已有人提交:
- 官方确认:问题由
TcpSocketIoCompletionPortWin
引发。 - Chrome 133.0.6943.142 版本默认关闭该特性,作为临时解决方案。
【TcpSocketIoCompletionPortWin】
TcpSocketIoCompletionPortWin` 在 Chrome 网络栈中的作用
- 负责 Windows 平台的 TCP 异步 I/O 处理,使用 IOCP(I/O Completion Port)机制 进行高效管理。
- 影响范围:
- HTTP(S) 连接:网页加载的所有 TCP 请求(包括静态资源)。
- WebSocket 连接:影响 WebSocket 长连接数据传输。
- Chromium IPC(进程间通信):影响 Chrome 进程间的数据传输。
- QUIC/TLS 连接:影响 TLS 加密连接的数据流控制。
源码主要在
1 |
|
虽然对网络这块很感兴趣,不过这里还是不为难自己了,关注一下后续怎么修复
Chrome 133 引发 net::ERR_CONTENT_LENGTH_MISMATCH 问题的分析与解决
https://zjfans.github.io/2025/02/26/chrome-netERR_CONTENT_LENGTH_MISMATCH/