You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js中使用Axios获取gzip站点地图出现Z_BUF_ERROR如何解决

问题根因

这个报错核心是Axios自动解压逻辑和手动配置的请求头冲突导致的,具体触发原因如下:

  • Node.js 环境下的Axios默认会自动处理gzip/deflate/br响应的解压,同时会自动添加对应的Accept-Encoding请求头。如果你手动指定了Accept-Encoding头,Axios会判定你要自行处理响应解压,就会关闭内置的自动解压逻辑。
  • 你没有配置responseType参数,Axios默认会把响应数据按UTF-8格式转为字符串,gzip是二进制格式,转字符串的过程会破坏原始二进制结构,后续解压时就会因为数据损坏抛出Z_BUF_ERROR文件意外结束的报错。

浏览器和Postman不会出现该问题,是因为两者都会自动识别压缩响应、完成二进制转码和解压的全流程,不会出现二进制转字符串损坏数据的情况。

修复方案

两个方案二选一即可:

  • 删掉手动添加的Accept-Encoding请求头,让Axios自动处理解压,直接就能拿到解压后的XML内容:
let response = await axios.get(`${url}/th-sitemapIndex.xml.gz`);
// response.data 即为解压后的XML文本
  • 如果你要自行处理解压,需要额外添加responseType: 'arraybuffer'配置,拿到完整的二进制压缩数据再自行解压:
let response = await axios.get(`${url}/th-sitemapIndex.xml.gz`, {
 headers: {
   'Accept': '*/*',
   'Accept-Encoding': 'gzip, deflate, br'
 },
 responseType: 'arraybuffer'
});
// response.data 是完整的gzip二进制Buffer,可直接传入zlib解压

内容的提问来源于stack exchange,提问作者Fadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:54:02