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

chrome-nginx-网络包分析

同时查看了windows侧抓的包,确认确实是chrome发出的FIN,排除现场防火墙拦截的可能性。

【初步结论】

  • Chrome 133 在数据传输未完成时,主动发送 FIN 终止连接,导致 部分静态资源加载失败。
  • Edge、Chrome 131 及以下版本均无此问题,升级至 Chrome 133 后,问题立即复现。
  • 结论:Chrome 133 的 TCP 处理逻辑存在 Bug,并非 Nginx 或防火墙导致的问题。

【Bug 反馈 & 官方响应】

【TcpSocketIoCompletionPortWin】

TcpSocketIoCompletionPortWin` 在 Chrome 网络栈中的作用

  • 负责 Windows 平台的 TCP 异步 I/O 处理,使用 IOCP(I/O Completion Port)机制 进行高效管理。
  • 影响范围:
    1. HTTP(S) 连接:网页加载的所有 TCP 请求(包括静态资源)。
    2. WebSocket 连接:影响 WebSocket 长连接数据传输。
    3. Chromium IPC(进程间通信):影响 Chrome 进程间的数据传输。
    4. QUIC/TLS 连接:影响 TLS 加密连接的数据流控制。

源码主要在

1
2
3
4
net/socket/tcp_socket_win.cc
net/socket/tcp_socket_win.h
net/socket/tcp_socket_io_completion_port_win.cc
net/socket/tcp_socket_io_completion_port_win.h

https://source.chromium.org/chromium/chromium/src/+/main:net/socket/tcp_socket_io_completion_port_win.cc

虽然对网络这块很感兴趣,不过这里还是不为难自己了,关注一下后续怎么修复


Chrome 133 引发 net::ERR_CONTENT_LENGTH_MISMATCH 问题的分析与解决
https://zjfans.github.io/2025/02/26/chrome-netERR_CONTENT_LENGTH_MISMATCH/
作者
张三疯
发布于
2025年2月26日
许可协议