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

Express中Axios 1.2.0 GET请求返回不可读响应的问题求助

Axios 1.2.0请求返回乱码的原因与修复方案

问题成因

你遇到的乱码是Axios 1.2.0的已知bug导致的:该版本对响应的自动解压逻辑存在缺陷,当服务器返回gzip/deflate压缩的响应时(比如JSONPlaceholder默认会返回压缩数据),Axios没有正确解压,直接把二进制压缩数据当成UTF-8字符串解析,最终输出乱码。

修复方案

方案1:升级Axios到修复版本

Axios在1.2.1版本已经修复了这个自动解压的问题,直接升级依赖即可解决:

# npm
npm update axios@^1.2.1

# yarn
yarn upgrade axios@^1.2.1

升级后不需要修改原有代码,result.data会正常解析为JSON数组。

方案2:手动处理解压(适合无法升级版本的场景)

如果暂时不能升级Axios,可以手动指定响应类型为arraybuffer,然后用Node.js的zlib模块解压:

import axios from 'axios';
import zlib from 'zlib';
import { promisify } from 'util';

// 把zlib的回调方法转为Promise形式
const gunzip = promisify(zlib.gunzip);

const response = await axios.get('https://jsonplaceholder.typicode.com/posts', {
  responseType: 'arraybuffer',
  headers: {
    'Accept-Encoding': 'gzip, deflate'
  }
});

// 解压后转成UTF-8字符串再解析为JSON
const decompressedBuffer = await gunzip(response.data);
const result = JSON.parse(decompressedBuffer.toString('utf8'));

方案3:禁用服务器压缩

在请求头中指定不接受压缩响应,让服务器返回原始未压缩的数据:

const result: AxiosResponse = await axios.get('https://jsonplaceholder.typicode.com/posts', {
  headers: {
    'Accept-Encoding': 'identity'
  }
});

这种方法无需修改Axios版本,但会增加数据传输量,只适合临时应急使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:20:29