有几个数据量比较大( 57kb 左右)的 api 在 chrome 浏览器下偶尔会报错如下:
GET http://localhost:3000/api/v1/xxx net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
这里的 3000 是 vite 的端口,对应的后端端口是 4000 。
怀疑是不是 chrome 哪里设置不对,但是最近也没改动过设置,我还把 chrome 上所有的扩展都禁用了
之前没有任何问题,最近也没改动过代码,也没升级过依赖库,发现问题是因为我更新了 GoLand ,然后重启了电脑就出现这个问题了。
最开始以为是 GoLand 版本导致的,我尝试过不用 GoLand 启动后端程序、GoLand 降级为之前版本,问题依旧
前后端分离的方式,后端是用 Go+Gin,前端是 Vue3+Vite5.2.6 ,本地开发的时候 vite.config.ts 里的 server 配置如下
proxy: { "/api/v1": { target: "http://localhost:4000", ws: true, changeOrigin: true, }, }
![]() | 1 musi 232 天前 看看原始 go api 返回的 response header 和 vite api 返回的 response header |
2 imherer OP @musi 原始 api 的: HTTP/1.1 200 OK Content-Type: application/json; charset= Date: Wed, 19 Feb 2025 02:00:08 GMT Transfer-Encoding: chunked vite 正常返回: HTTP/1.1 200 OK Access-Control-Allow-Origin: * content-type: application/json; charset= date: Wed, 19 Feb 2025 02:01:05 GMT connection: close transfer-encoding: chunked vite 报错返回: HTTP/1.1 200 OK Access-Control-Allow-Origin: * content-type: application/json; charset= date: Wed, 19 Feb 2025 02:01:42 GMT connection: close transfer-encoding: chunked |
3 8888888888 232 天前 如果是 mac 的话,兴许是要在本地网络里面勾选上 chrome |
![]() | 4 0900301432 232 天前 重启服务器 |
![]() | 5 0900301432 232 天前 我前几天也碰到这个问题,客户端弄了一遍没有好。 同事把服务重启了就好了 |
![]() | 7 imherer OP @0900301432 #5 后端服务和前端现在都在我本机电脑上,尝试过重启还是不行 |
9 Kokomashiro 232 天前 看看有问题的电脑 c 盘空间是不是不够了,具体啥原因忘了 |
10 chobitssp 232 天前 @imherer 2 楼说了 The page would load normally if accessed in HTTPS mode 如果线上是 https 就不会复现 |
![]() | 11 imherer OP @chobitssp #10 线上确实是 https 如果在本地我把前端打包后直接放在和后端服务里(相当于前后端都是同一个 host )的情况下用 chrome 访问也没问题 |
![]() | 12 imherer OP @Kokomashiro 够的呢,c 盘还有 500g+ |
![]() | 13 Aolose 232 天前 node 版本是多少 这里有个和版本相关的原因 https://github.com/nodejs/node/issues/13677 另外 vite 的 proxy 用的一个古老的 http-proxy 包,它也有嫌疑 https://github.com/http-party/node-http-proxy/issues/921 |
![]() | 14 javalaw2010 232 天前 chunked 响应?可能是响应里没有正确的结束符,结尾需要额外传输 0\r\n\r\n 表示结束 |
![]() | 15 magewu1223ll 232 天前 这个错误是数据在传输过程中服务器突然中断了,是不是在调试时,你的服务有什么热更新然后重启了? |
![]() | 17 imherer OP @magewu1223ll 没有,就正常访问偶现,而且概率还挺高 |
18 abc1310054026 232 天前 你可以尝试模拟下返回的数据,尝试返回不同大小的数据,看看是否报错。怀疑 chrome 对非安全数据大小有限制? |
![]() | 19 imherer OP @abc1310054026 目前有 3 个接口返回的数据量比较大,我尝试过把这 3 个接口都返回空就不会报错。 但是这 3 个接口也不是 100%报错,而且有一定概率会报错 |
![]() | 20 Timefly 232 天前 是不是搞了负载均衡之类的东西 |
22 abc1310054026 232 天前 建议换一台 PC 或者换个 chroome 版本试试,Chrome 其实没你想象的那么可靠,在一些边缘场景会有问题反反复复出现。 可以用 browserstack 测试不同版本的浏览器。 |
![]() | 23 imherer OP @abc1310054026 #22 感谢,我看看 browserstack |
![]() | 24 rekulas 232 天前 遇到玄学问题可以尝试下玄式方案,比如换个端口? |
![]() | 26 UnluckyNinja 232 天前 via Android vite 5.2.6 有点老了,v5 现在最新是 5.4.14 ,试试更新下看看 |
![]() | 27 imherer OP @UnluckyNinja 应该和这个关系不大,我有更到 6.0.9 还是同样的问题 |
![]() | 28 whoosy 232 天前 把 vpn 关掉 |
30 xmdbb 232 天前 字是 ERR_INCOMPLETE_CHUNKED_ENCODING |
![]() | 31 UnluckyNinja 232 天前 via Android @imherer #27 那感觉可以试试抓包比较一下到底有何区别?最好是前端到 vite ,vite 到后端都抓一下,对比正常的看看到底是 incomplete 在哪里 |
![]() | 32 Ly0n 232 天前 这有一个 nginx 报相同错误 ERR_INCOMPLETE_CHUNKED_ENCODING 的解决方案 https://juejin.cn/post/7096409076245987358 看起来像是缓冲区的问题 或者会不会是特定数据的问题 |
![]() | 33 imherer OP @UnluckyNinja #31 嗯嗯 |
34 Oldletter 232 天前 你电脑有没有 web 防护的杀毒软件呢? |
![]() | 35 imherer OP @Oldletter 有个 McAfee ,它还自动给 chrome 装了个插件,我最开始也以为是它的问题,我把插件给关了。 软件没关,我去看看有没有什么设置 |
36 alangc 232 天前 试试下面三个方法呢: 1. 关闭浏览器所有 3000 标签,只保留一个,测试下 2. vite 启动命令加上 --force ,重启 3. 删除 node_modules, 重新安装依赖,重启 |
37 hackroad 232 天前 https://netlog-viewer.appspot.com/#events chrome 抓包看看 |
40 mizuki9 232 天前 chrome 设置里关掉 “预加载网页” ? |
41 kbqncf 232 天前 既然是有概率出现,那么是不是服务端接口返回的数据有某种变化? 能正常请求的时候,记录下接口返回的数据,然后服务端接口强制写死返回相同的数据,再多次测试接口看看是否正常。 难道是接口数据里面有 emoji 或特殊字符? |
![]() | 42 imherer OP @kbqncf 没有 emoji 或特殊字符,就是纯字符串。现在只有在 chrome 下访问通过 vite 代理的端口 api 才会有问题,其他的浏览器或者直接访问后端的 api 就没问题。 用 wireshark 抓包看了下当 chrome 出现错误的时候,抓包里的数据还是正常返回的 |
43 cnbdas 232 天前 https://github.com/chimurai/http-proxy-middleware/discussions/574 可以看看这个移除 transfer-encoding 然后访问试试 |
44 richardZhao 232 天前 期待后续。 |
![]() | 45 UnluckyNinja 232 天前 via Android 楼主要不做一个 minimal reproduction 吧,服务器信息脱下敏、换成固定的假数据、前端最低限度内容,能复现报错就行,让大家在本地跑一跑,没准就有人 debug 出来了 |
![]() | 46 4Et5ShxMIq58n6Lr 232 天前 我今天本地开发的时候也遇到了,接口走代理的时候,也会出现这种情况,不过不是必现,时好时坏,不知道为啥,刷新一下页面又会正常 |
47 huiguo19962023 232 天前 真是巧了,我今天遇到类似的问题,代码没有任何改变。只是昨天晚上电脑强制断电了,今天重启服务重新打开谷歌浏览器就变成这样了,目前未定位问题。但是用火狐或者 edge 没有问题。所以排除代码的问题。 |
![]() | 48 imherer OP @huiguo19962023 简直一模一样啊。我也是因为昨天更新了 GoLand 然后重启了电脑出现的 |
![]() | 49 imherer OP @UnluckyNinja #45 晚点我弄一个能复现的 minimal reproduction 试试 |
![]() | 50 wangtian2020 232 天前 把 F12 里的禁用缓存打开 |
![]() | 51 imherer OP @wangtian2020 开着的,而且尝试过清除浏览器缓存、无痕模式 都不行 |
![]() | 52 wangtian2020 232 天前 ws: true 是个什么 后端真的是一个个懒狗,跨域不开,非要前端搞 proxy changeOrigin 我看啊,是这个 websocket 分包了 |
53 Zz09 232 天前 会不会返回的数据出现某个 chrome 不能识别的字符导致的 |
![]() | 54 SleepyRaven 232 天前 https://stackoverflow.com/questions/29894154/chrome-neterr-incomplete-chunked-encoding-error 杀毒软件的类似实时防护功能导致的,不限于 ESET 和卡巴斯基 |
![]() | 55 wangtian2020 232 天前 ![]() 不用找原因了。 原因就是因为你司后端是一个懒狗,不愿意在开发环境搞跨域请求头 `Access-Control-Allow-Origin: *` 所以你们前端就上了 vite 的 proxy 功能,把请求接口代理转发一下, 避免这种因为接口地址跨域并且接口返回头并不是跨域。 ws: true 说明用到了 websocket 小请求没事,结果有一个请求太大了,57KB ,触发了 websocket 的分包 (注:分包粘包不是一个问题,而是一个现象)。触发了 bug ,一分包,夹断了 |
![]() | 56 imherer OP |
![]() | 57 wangtian2020 232 天前 建议趁着下班前,火速去跟后端 battle 去 |
![]() | 58 leokun 232 天前 @wangtian2020 #57 他这个和 ws 没关系,作者发的响应头中有 Transfer-Encoding: chunked ,说明是分块传输。 这个 HTTP 协议应该是作者的服务程序自带的,通过代理后,只有 chrome 在解码块的时候报错了 |
![]() | 59 9pr7im4IjQ9u0806 232 天前 @imherer #19 数据量大的时候超出了默认的连接等待时间,设置一下相应等待时间就好了 |
![]() | 60 wangtian2020 232 天前 @leokun 都解释的通的,websocket 分包这个机制,就是看网络层心情,大数据传输有时候分包有时候不分,这不就跟 OP 的有时没问题有时有问题,对上了吗。而且大数据量也对上了。他把 websocket 去掉。肯定就好了 |
![]() | 61 tcper 232 天前 @wangtian2020 看作者的例子是 get 请求,不是 websocket |
![]() | 62 myderr 232 天前 没成功复现 |
63 dishangyijiao 232 天前 @imherer 拉下来,在本地没有复现。 |
![]() | 65 imherer OP @dishangyijiao 感谢! |
66 dishangyijiao 232 天前 @imherer 我是 Mac mini M4 ,Chrome Version 133.0.6943.98 (Official Build) (arm64)。 |
![]() | 67 imherer OP @dishangyijiao #66 嗯,我昨天在 Mac 上也试了,未能复现 Chrome Version 133.0.6943.99 |
68 leochenL 232 天前 我们内网的平台也出现了,也是只有在那个人电脑的 Chrome 上才会出现,没找出啥问题,让用 edge 了 |
![]() | 70 gsx250 232 天前 只在 chrome 下偶现?试试看是不是 chrome 的插件导致的。卸载完所有的插件,再重启 chrome 试试。 再或者重新安装 chrome ,不要安装插件。 |
![]() | 74 hailaz 232 天前 Windows chrome133.0.6943.127 (正式版本) ( 64 位)没有复现 |
![]() | 75 asdjgfr 232 天前 数据改为 5000000 的时候复现了,设置跨域不走 vite 的代理也这样,edge 和火狐没问题,估计是 chrome 的特殊 bug 吧 版本 133.0.6943.98 (正式版本) ( 64 位) |
76 Sum0l 232 天前 未能复现 windwos chrome 版本 133.0.6943.12 (正式版本) ( 64 位) vscode 运行前后端 |
77 frank553000 232 天前 我的也是,换端口,重启 php ,重新安装包都试了,暂时用 edge 了: 版本 133.0.6943.127 (正式版本) ( 64 位) GET http://localhost:3000/wp-content/themes/xxx/assets/dist/css/app.css?ver=2de18c97299dd576c55d9a3468426371 net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) GET http://localhost:3000/wp-content/themes/xxx/assets/dist/img/logo.png net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK) GET http://localhost:3000/ net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) |
![]() | 78 ZLY201 232 天前 ![]() chromium 内核已知问题,本地走代理访问大页面会出现这个问题 -> https://issues.chromium.org/issues/391126826 |
![]() | 79 Aolose 232 天前 没有复现 设置到了 500000 条 除了会卡顿一下 ... 这是玄学吗 Node v23.6.1 Go go1.24.0 windows/amd64 Chrome 133.0.6943.98 (Official Build) (64-bit) |
80 pingdog 232 天前 via Android 反复刷新才出现?看似是复用了连接,改成用完即弃? |
82 Danswerme 232 天前 我逐步加到 50,000,000 条,浏览器耗时八秒传输了 739 MB 数据,页面没能加载出数据条数,但是也没有复现这个问题。 Node v22.13.1 go version go1.23.6 windows/amd64 Chrome 133.0.6943.127 (Official Build) (64-bit) |
83 DLOG 231 天前 看不出来,直接 wireshark 抓包看吧 |
85 morytyann 231 天前 根据 Chromium 的 Issue ,添加--disable-features=TcpSocketIoCompletionPortWin 到快捷方式的目标里即可。 Issue 链接: https://issues.chromium.org/issues/391126826 解决方法: https://issues.chromium.org/issues/391126826#comment15 |
87 zhaojun1998 231 天前 也遇到了这个问题。。一开始以为浏览器某个插件导致的,然后换了 Edge 正常。看来真是谷歌浏览器的问题了。 |
![]() | 88 diyhi 231 天前 chrome 的问题,Edge 和 Firefox 都正常,chrome 用 http 访问就会报错 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK),https 正常 |
89 lyj9768 231 天前 我也遇到了,昨晚手贱更新了 chrome 到 133 ,今天内网的页面时不时就加载不出来,换火狐正常。我记得之前好像说 chrome 会禁止没有 https 的访问,但是难道连本地的也禁止? |
![]() | 90 july1995 231 天前 via iPhone 蹲一个后续,问题解决了 通知一下哈。 |
92 xinghusp 230 天前 |
93 xinghusp 230 天前 我今天升级的 133.0.6943.127 ,然后我内网服务器的各种 Web 页面就打不开了,各种 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)。 |
![]() | 95 MFWT 230 天前 |
![]() | 98 japeth 227 天前 我们也遇到了,换其他浏览器就没问题,就测试同事的电脑会,其他都不会。 |