使用node-fetch设置Accept-Encoding:'gzip'时是否自动解压响应数据?
node-fetch gzip解压行为说明
结论先行
就算你手动在请求头配置了Accept-Encoding:'gzip',默认配置下node-fetch也不会自动对返回的gzip压缩响应做解压处理。
具体行为规则
- 如果你需要自动处理gzip/deflate压缩响应,需要在请求配置中额外添加
compress: true参数:- 开启该参数后,node-fetch会自动带上
Accept-Encoding: gzip,deflate请求头,无需你手动配置 - 服务端返回压缩响应后,node-fetch会自动完成解压,你直接调用
res.text()、res.json()、res.buffer()等方法拿到的就是正常的未压缩数据 - 如果你已经手动自定义了
Accept-Encoding请求头,node-fetch不会覆盖你的配置,会按照你指定的编码格式处理对应的解压逻辑
- 开启该参数后,node-fetch会自动带上
- 如果你没有开启
compress: true,仅手动添加了Accept-Encoding: 'gzip'请求头,返回的响应流就是压缩后的二进制内容,直接读取会得到乱码,需要你手动引入zlib模块完成解压操作。
示例:开启自动解压的请求写法
const fetch = require('node-fetch'); const getRes = async () => { const response = await fetch('https://example.com/api', { method: 'GET', compress: true // 开启gzip/deflate自动解压 }); const result = await response.json(); // 直接获取解压后的数据 console.log(result); }
内容的提问来源于stack exchange,提问作者Muhammad Ali Nazar
相关产品推荐
相关产品推荐

