在 Axios 的 1.2.0 版本,不少人遇到了 Z_BUF_ERROR
的 BUG。
當設置了 Content-Encoding
的請求頭,但是返回的內容為空時(如 204 請求、HEAD 請求、或者重定向請求),Axios 仍會調用 zlib
的 BrotliDecoder
進行 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 你就得趕緊給老子更新,趕緊發版” 的感覺,牢騷歸牢騷,還是希望開源社區的維護者和使用者雙方之間能多一點理解,多一點包容。