Viki

Viki 写东西的地方

努力上进且优秀
github
email
x
steam
bilibili
douban

记录 Axios 的 `Z_BUF_ERROR` BUG

在 Axios 的 1.2.0 版本,不少人遇到了 Z_BUF_ERROR 的 BUG。

当设置了 Content-Encoding 的请求头,但是返回的内容为空时(如 204 请求、HEAD 请求、或者重定向请求),Axios 仍会调用 zlibBrotliDecoder 进行 Brotli decompression,导致 zlib 执行出错,可参考这个 issue

随后,开发者修复了这个问题,并同时修复了响应头没有 Content-Length 的情况。

出于某些原因,Axios 核心开发者对发版比较敏感(参考这个评论和这个 issue),在社区的一再期盼下,1.2.1 终于也是发布了。

然而好景不长,1.2.1 版本再次出现了 Z_BUF_ERROR 的问题,翻了几页 issue 之后,大概定位了报错原因:在上一次修复 “响应头没有 Content-Length 的情况” 的提交中,引发了 Brotli decompression 的 BUG,当服务器返回的数据压缩格式为 br 时,就会导致 Z_BUF_ERROR 错误,作为临时解决方案,你可以手动设置请求头指定服务器返回的编码格式,并确保不返回 br 即可,如下所示。

axios.get(someApi, {
  headers: { 'Accept-Encoding': 'gzip,deflate,compress' }
})

这个问题已经被修复了,但是还没发版 =.=,至于为什么不发版,刚才有提到。虽然还没发,但是看到昨天(2022/12/24,刚好是平安夜)提了一个发版的 PR,希望尽快发布吧,距离上一个版本发布已经三个礼拜了呢,毕竟知名度这么高的库最新版存在 broken bug 这么长时间容易问题越堆越多,而且说实话影响的范围非常广。

在翻 issue 的时候看到了挺多不礼貌的发言,有一种 “你写了 bug 你就得赶紧给老子更新,赶紧发版” 的感觉,牢骚归牢骚,还是希望开源社区的维护者和使用者双方之间能多一点理解,多一点包容。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。