在 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 即可,如下所示。

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

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

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