Viki

Viki 写东西的地方

努力上进且优秀
x
github
email
bilibili

記錄 Axios 的 `Z_BUF_ERROR` 錯誤

在 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 你就得趕緊給老子更新,趕緊發版” 的感覺,牢騷歸牢騷,還是希望開源社區的維護者和使用者雙方之間能多一點理解,多一點包容。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。