前后端的大佬们帮忙看看,最近遇到个奇葩问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
imherer
V2EX    程序员

前后端的大佬们帮忙看看,最近遇到个奇葩问题

  •  3
     
  •   imherer 232 天前 10224 次点击
    这是一个创建于 232 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有几个数据量比较大( 57kb 左右)的 api 在 chrome 浏览器下偶尔会报错如下:

    GET http://localhost:3000/api/v1/xxx net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 

    这里的 3000 是 vite 的端口,对应的后端端口是 4000 。

    复现场景

    • PC 版 chrome 通过 vite 代理访问后端 api (版本 133.0.6943.99 )

    已尝试过且正常的场景

    • PC chrome 直接访问后端 api 正常
    • PC edge 直接访问后端 api 正常
    • PC edge 通过 vite 代理访问后端 api 正常
    • PC firefox 直接访问后端 api 正常
    • PC firefox 通过 vite 代理访问后端 api 正常
    • Mac chrome 直接访问后端 api 正常
    • Mac chrome 通过 vite 代理访问后端 api 正常
    • PC chrome 访问线上环境 正常
    • 用同事电脑访问 vite 代理 api 也是正常的

    怀疑是不是 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 条附言    232 天前
    添加了一个最小的复现仓库,有兴趣的大佬可以试试,看能复现吗

    https://github.com/im-here/err-incomplete-chunked-encoding-reproduction
    102 条回复    2025-02-28 09:38:20 +08:00
    1  2  
    musi
        1
    musi  
       232 天前
    看看原始 go api 返回的 response header 和 vite api 返回的 response header
        2
    imherer  
    OP
       232 天前
    @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
    8888888888
        3
    8888888888  
       232 天前
    如果是 mac 的话,兴许是要在本地网络里面勾选上 chrome
    0900301432
        4
    0900301432  
       232 天前
    重启服务器
    0900301432
        5
    0900301432  
       232 天前
    我前几天也碰到这个问题,客户端弄了一遍没有好。 同事把服务重启了就好了
    imherer
        7
    imherer  
    OP
       232 天前
    @0900301432 #5 后端服务和前端现在都在我本机电脑上,尝试过重启还是不行
    imherer
        8
    imherer  
    OP
       232 天前
    @chobitssp 看着好像不是同一个问题。 而且我这个问题很奇葩,线上环境数据量比我本地的还大,已经的大于 57kb 了,访问也没这个问题
    Kokomashiro
        9
    Kokomashiro  
       232 天前
    看看有问题的电脑 c 盘空间是不是不够了,具体啥原因忘了
    chobitssp
        10
    chobitssp  
       232 天前
    @imherer 2 楼说了 The page would load normally if accessed in HTTPS mode
    如果线上是 https 就不会复现
    imherer
        11
    imherer  
    OP
       232 天前
    @chobitssp #10 线上确实是 https
    如果在本地我把前端打包后直接放在和后端服务里(相当于前后端都是同一个 host )的情况下用 chrome 访问也没问题
    imherer
        12
    imherer  
    OP
       232 天前
    @Kokomashiro 够的呢,c 盘还有 500g+
    Aolose
        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
    javalaw2010
        14
    javalaw2010  
       232 天前
    chunked 响应?可能是响应里没有正确的结束符,结尾需要额外传输 0\r\n\r\n 表示结束
    magewu1223ll
        15
    magewu1223ll  
       232 天前
    这个错误是数据在传输过程中服务器突然中断了,是不是在调试时,你的服务有什么热更新然后重启了?
    imherer
        16
    imherer  
    OP
       232 天前
    @Aolose node 版本是 v20.11.0

    关键是只有我电脑上的 chrome 有这个问题,我用别的浏览器或者别的电脑访问都没问题。
    imherer
        17
    imherer  
    OP
       232 天前
    @magewu1223ll 没有,就正常访问偶现,而且概率还挺高
    abc1310054026
        18
    abc1310054026  
       232 天前
    你可以尝试模拟下返回的数据,尝试返回不同大小的数据,看看是否报错。怀疑 chrome 对非安全数据大小有限制?
    imherer
        19
    imherer  
    OP
       232 天前
    @abc1310054026 目前有 3 个接口返回的数据量比较大,我尝试过把这 3 个接口都返回空就不会报错。 但是这 3 个接口也不是 100%报错,而且有一定概率会报错
    Timefly
        20
    Timefly  
       232 天前
    是不是搞了负载均衡之类的东西
    imherer
        21
    imherer  
    OP
       232 天前
    @Timefly 没有哦,就在我本地,一个后端
    abc1310054026
        22
    abc1310054026  
       232 天前
    建议换一台 PC 或者换个 chroome 版本试试,Chrome 其实没你想象的那么可靠,在一些边缘场景会有问题反反复复出现。

    可以用 browserstack 测试不同版本的浏览器。
    imherer
        23
    imherer  
    OP
       232 天前
    @abc1310054026 #22 感谢,我看看 browserstack
    rekulas
        24
    rekulas  
       232 天前
    遇到玄学问题可以尝试下玄式方案,比如换个端口?
    imherer
        25
    imherer  
    OP
       232 天前
    @rekulas 你说的有道理,我试试
    UnluckyNinja
        26
    UnluckyNinja  
       232 天前 via Android
    vite 5.2.6 有点老了,v5 现在最新是 5.4.14 ,试试更新下看看
    imherer
        27
    imherer  
    OP
       232 天前
    @UnluckyNinja 应该和这个关系不大,我有更到 6.0.9 还是同样的问题
    whoosy
        28
    whoosy  
       232 天前
    把 vpn 关掉
    imherer
        29
    imherer  
    OP
       232 天前
    @whoosy 不行哦,还是同样的问题
    xmdbb
        30
    xmdbb  
       232 天前
    字是 ERR_INCOMPLETE_CHUNKED_ENCODING
    UnluckyNinja
        31
    UnluckyNinja  
       232 天前 via Android
    @imherer #27 那感觉可以试试抓包比较一下到底有何区别?最好是前端到 vite ,vite 到后端都抓一下,对比正常的看看到底是 incomplete 在哪里
    Ly0n
        32
    Ly0n  
       232 天前
    这有一个 nginx 报相同错误 ERR_INCOMPLETE_CHUNKED_ENCODING 的解决方案
    https://juejin.cn/post/7096409076245987358
    看起来像是缓冲区的问题
    或者会不会是特定数据的问题
    imherer
        33
    imherer  
    OP
       232 天前
    @UnluckyNinja #31 嗯嗯
    Oldletter
        34
    Oldletter  
       232 天前
    你电脑有没有 web 防护的杀毒软件呢?
    imherer
        35
    imherer  
    OP
       232 天前
    @Oldletter 有个 McAfee ,它还自动给 chrome 装了个插件,我最开始也以为是它的问题,我把插件给关了。 软件没关,我去看看有没有什么设置
    alangc
        36
    alangc  
       232 天前
    试试下面三个方法呢:
    1. 关闭浏览器所有 3000 标签,只保留一个,测试下
    2. vite 启动命令加上 --force ,重启
    3. 删除 node_modules, 重新安装依赖,重启
    hackroad
        37
    hackroad  
       232 天前
    musi
        38
    musi  
       232 天前
    @imherer #2 仅有这些信息确实看不出来什么问题,如果有能力试试 wireshark 抓包,看看是服务的问题还是 node 得问题
    imherer
        39
    imherer  
    OP
       232 天前
    @alangc 不行噢
    mizuki9
        40
    mizuki9  
       232 天前
    chrome 设置里关掉 “预加载网页” ?
    kbqncf
        41
    kbqncf  
       232 天前
    既然是有概率出现,那么是不是服务端接口返回的数据有某种变化?

    能正常请求的时候,记录下接口返回的数据,然后服务端接口强制写死返回相同的数据,再多次测试接口看看是否正常。

    难道是接口数据里面有 emoji 或特殊字符?
    imherer
        42
    imherer  
    OP
       232 天前
    @kbqncf 没有 emoji 或特殊字符,就是纯字符串。现在只有在 chrome 下访问通过 vite 代理的端口 api 才会有问题,其他的浏览器或者直接访问后端的 api 就没问题。

    用 wireshark 抓包看了下当 chrome 出现错误的时候,抓包里的数据还是正常返回的
    cnbdas
        43
    cnbdas  
       232 天前
    https://github.com/chimurai/http-proxy-middleware/discussions/574
    可以看看这个移除 transfer-encoding 然后访问试试
    richardZhao
        44
    richardZhao  
       232 天前
    期待后续。
    UnluckyNinja
        45
    UnluckyNinja  
       232 天前 via Android
    楼主要不做一个 minimal reproduction 吧,服务器信息脱下敏、换成固定的假数据、前端最低限度内容,能复现报错就行,让大家在本地跑一跑,没准就有人 debug 出来了
    4Et5ShxMIq58n6Lr
        46
    4Et5ShxMIq58n6Lr  
       232 天前
    我今天本地开发的时候也遇到了,接口走代理的时候,也会出现这种情况,不过不是必现,时好时坏,不知道为啥,刷新一下页面又会正常
    huiguo19962023
        47
    huiguo19962023  
       232 天前
    真是巧了,我今天遇到类似的问题,代码没有任何改变。只是昨天晚上电脑强制断电了,今天重启服务重新打开谷歌浏览器就变成这样了,目前未定位问题。但是用火狐或者 edge 没有问题。所以排除代码的问题。
    imherer
        48
    imherer  
    OP
       232 天前
    @huiguo19962023 简直一模一样啊。我也是因为昨天更新了 GoLand 然后重启了电脑出现的
    imherer
        49
    imherer  
    OP
       232 天前
    @UnluckyNinja #45 晚点我弄一个能复现的 minimal reproduction 试试
    wangtian2020
        50
    wangtian2020  
       232 天前
    把 F12 里的禁用缓存打开
    imherer
        51
    imherer  
    OP
       232 天前
    @wangtian2020 开着的,而且尝试过清除浏览器缓存、无痕模式 都不行
    wangtian2020
        52
    wangtian2020  
       232 天前
    ws: true 是个什么
    后端真的是一个个懒狗,跨域不开,非要前端搞 proxy changeOrigin
    我看啊,是这个 websocket 分包了
    Zz09
        53
    Zz09  
       232 天前
    会不会返回的数据出现某个 chrome 不能识别的字符导致的
    SleepyRaven
        54
    SleepyRaven  
       232 天前
    https://stackoverflow.com/questions/29894154/chrome-neterr-incomplete-chunked-encoding-error
    杀毒软件的类似实时防护功能导致的,不限于 ESET 和卡巴斯基
    wangtian2020
        55
    wangtian2020  
       232 天前   1
    不用找原因了。
    原因就是因为你司后端是一个懒狗,不愿意在开发环境搞跨域请求头
    `Access-Control-Allow-Origin: *`
    所以你们前端就上了 vite 的 proxy 功能,把请求接口代理转发一下,
    避免这种因为接口地址跨域并且接口返回头并不是跨域。
    ws: true 说明用到了 websocket
    小请求没事,结果有一个请求太大了,57KB ,触发了 websocket 的分包 (注:分包粘包不是一个问题,而是一个现象)。触发了 bug ,一分包,夹断了
    wangtian2020
        57
    wangtian2020  
       232 天前
    建议趁着下班前,火速去跟后端 battle 去
    leokun
        58
    leokun  
       232 天前
    @wangtian2020 #57 他这个和 ws 没关系,作者发的响应头中有 Transfer-Encoding: chunked ,说明是分块传输。
    这个 HTTP 协议应该是作者的服务程序自带的,通过代理后,只有 chrome 在解码块的时候报错了
    9pr7im4IjQ9u0806
        59
    9pr7im4IjQ9u0806  
       232 天前
    @imherer #19 数据量大的时候超出了默认的连接等待时间,设置一下相应等待时间就好了
    wangtian2020
        60
    wangtian2020  
       232 天前
    @leokun 都解释的通的,websocket 分包这个机制,就是看网络层心情,大数据传输有时候分包有时候不分,这不就跟 OP 的有时没问题有时有问题,对上了吗。而且大数据量也对上了。他把 websocket 去掉。肯定就好了
    tcper
        61
    tcper  
       232 天前
    @wangtian2020 看作者的例子是 get 请求,不是 websocket
    myderr
        62
    myderr  
       232 天前
    没成功复现
    dishangyijiao
        63
    dishangyijiao  
       232 天前
    @imherer 拉下来,在本地没有复现。
    imherer
        64
    imherer  
    OP
       232 天前
    @myderr 看来真的是我电脑上 chrome 有问题了。目前这个只有在我电脑上的 chrome 能复现,而且概率还挺高的,基本上 10 次必现 1 次
    imherer
        65
    imherer  
    OP
       232 天前
    @dishangyijiao 感谢!
    dishangyijiao
        66
    dishangyijiao  
       232 天前
    @imherer 我是 Mac mini M4 ,Chrome Version 133.0.6943.98 (Official Build) (arm64)。
    imherer
        67
    imherer  
    OP
       232 天前
    @dishangyijiao #66 嗯,我昨天在 Mac 上也试了,未能复现 Chrome Version 133.0.6943.99
    leochenL
        68
    leochenL  
       232 天前
    我们内网的平台也出现了,也是只有在那个人电脑的 Chrome 上才会出现,没找出啥问题,让用 edge 了
    imherer
        69
    imherer  
    OP
       232 天前
    @leochenL 真的搞不懂是啥原因
    gsx250
        70
    gsx250  
       232 天前
    只在 chrome 下偶现?试试看是不是 chrome 的插件导致的。卸载完所有的插件,再重启 chrome 试试。
    再或者重新安装 chrome ,不要安装插件。
    imherer
        71
    imherer  
    OP
       232 天前
    @gsx250 是的,我倒是把所有插件都关了尝试过,不过没卸载
    gsx250
        72
    gsx250  
       232 天前
    @imherer #71 卸载试试,有些 chrome 插件回带来偶发魔法 bug
    imherer
        73
    imherer  
    OP
       232 天前
    @gsx250 #72 嗯
    hailaz
        74
    hailaz  
       232 天前
    Windows chrome133.0.6943.127 (正式版本) ( 64 位)没有复现
    asdjgfr
        75
    asdjgfr  
       232 天前
    数据改为 5000000 的时候复现了,设置跨域不走 vite 的代理也这样,edge 和火狐没问题,估计是 chrome 的特殊 bug 吧
    版本 133.0.6943.98 (正式版本) ( 64 位)
    Sum0l
        76
    Sum0l  
       232 天前
    未能复现
    windwos chrome 版本 133.0.6943.12 (正式版本) ( 64 位)
    vscode 运行前后端
    frank553000
        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)
    ZLY201
        78
    ZLY201  
       232 天前   2
    chromium 内核已知问题,本地走代理访问大页面会出现这个问题 -> https://issues.chromium.org/issues/391126826
    Aolose
        79
    Aolose  
       232 天前
    没有复现 设置到了 500000 条 除了会卡顿一下 ... 这是玄学吗

    Node v23.6.1
    Go go1.24.0 windows/amd64
    Chrome 133.0.6943.98 (Official Build) (64-bit)
    pingdog
        80
    pingdog  
       232 天前 via Android
    反复刷新才出现?看似是复用了连接,改成用完即弃?
    imherer
        81
    imherer  
    OP
       232 天前
    @fuzzsh 不一定是反复刷新才会出现。 有可能第一次请求就会出现
    Danswerme
        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)
    DLOG
        83
    DLOG  
       231 天前
    看不出来,直接 wireshark 抓包看吧
    imherer
        84
    imherer  
    OP
       231 天前
    @DLOG 抓包对比了正常和错误的情况,返回的数据都是一模一样的
    morytyann
        85
    morytyann  
       231 天前
    根据 Chromium 的 Issue ,添加--disable-features=TcpSocketIoCompletionPortWin 到快捷方式的目标里即可。

    Issue 链接: https://issues.chromium.org/issues/391126826
    解决方法: https://issues.chromium.org/issues/391126826#comment15
    imherer
        86
    imherer  
    OP
       231 天前
    @morytyann 加了--disable-features=TcpSocketIoCompletionPortWin 还是不行
    zhaojun1998
        87
    zhaojun1998  
       231 天前
    也遇到了这个问题。。一开始以为浏览器某个插件导致的,然后换了 Edge 正常。看来真是谷歌浏览器的问题了。
    diyhi
        88
    diyhi  
       231 天前
    chrome 的问题,Edge 和 Firefox 都正常,chrome 用 http 访问就会报错 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK),https 正常
    lyj9768
        89
    lyj9768  
       231 天前
    我也遇到了,昨晚手贱更新了 chrome 到 133 ,今天内网的页面时不时就加载不出来,换火狐正常。我记得之前好像说 chrome 会禁止没有 https 的访问,但是难道连本地的也禁止?
    july1995
        90
    july1995  
       231 天前 via iPhone
    蹲一个后续,问题解决了 通知一下哈。
    imherer
        91
    imherer  
    OP
       230 天前
    @july1995 从目前的情况来看应该是 chrome 的 feature 了
    xinghusp
        92
    xinghusp  
       230 天前
    @lyj9768 我了个大*,**的 chrome ,害我折腾了一晚上..
    不过我跟 @imherer 一样,加了--disable-features=TcpSocketIoCompletionPortWin 也没解决
    xinghusp
        93
    xinghusp  
       230 天前
    我今天升级的 133.0.6943.127 ,然后我内网服务器的各种 Web 页面就打不开了,各种 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)。
    MFWT
        94
    MFWT  
       230 天前
    @imherer

    @xinghusp
    似乎 Chrome 问题不断,我这边碰到了 HTTP 访问有请求有响应但是没有任何显示输出的情况,内网服务都无法访问了
    MFWT
        95
    MFWT  
       230 天前
    @imherer
    @xinghusp

    更邪门的是,楼上的方法『--disable-features=TcpSocketIoCompletionPortWin 』对我来说管用
    MFWT
        96
    MFWT  
       230 天前 via Android
    @MFWT 虽然好了,但是似乎还是有点不稳定,也许还得继续观察,可能没有找到病根
    md.....
    xinghusp
        97
    xinghusp  
       229 天前
    @MFWT 非常邪门的是,我重启电脑后,这个参数管用了…这个问题在我虚拟机里的 132 版的 Chrome 里也复现了,并且也用这个方法解决了
    japeth
        98
    japeth  
       227 天前
    我们也遇到了,换其他浏览器就没问题,就测试同事的电脑会,其他都不会。
    imherer
        99
    imherer  
    OP
       227 天前
    @japeth 真的是邪了门了,今天来提示 windows 系统有更新,然后更了,目前看是没问题了。但是我看 chrome 还是之前的版本
    japeth
        100
    japeth  
       227 天前
    @imherer 哈哈哈我们测试今天也说不会了。
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3639 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 00:49 PVG 08:49 LAX 17:49 JFK 20:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86