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

Node.js中使用fetch()启用gzip压缩解决大响应报错问题

在JavaScript的fetch()中启用响应压缩

要实现类似curl --compressed或PHP curl CURLOPT_ENCODING的响应压缩功能,只需在fetch请求中添加Accept-Encoding请求头,告知服务器你支持的压缩算法:

fetch('你的请求地址', {
  headers: {
    'Accept-Encoding': 'gzip, deflate, br' // 包含gzip、deflate、Brotli三种主流压缩算法
  }
})
.then(response => {
  // 现代浏览器和Node.js 18+内置的fetch会自动解码压缩响应,无需手动处理
  return response.json(); // 根据需求换成text()/blob()等
})
.catch(err => console.error('请求失败:', err));

关键说明

  • 当服务器收到带有Accept-Encoding的请求时,若支持对应算法,会返回压缩后的响应,并在响应头中添加Content-Encoding标识压缩格式(如gzip)。
  • 现代环境(浏览器、Node.js 18+)的fetch会自动识别并解码压缩响应,你直接处理返回的响应内容即可,无需手动调用解压工具。

针对你遇到的报错的额外建议

  • TypeError: terminated(UND_ERR_SOCKET):该错误多因未压缩的响应体积过大导致连接中途关闭。启用压缩后响应体积会显著减小,基本可以解决此问题。若仍出现,建议检查服务器是否有响应大小限制,或考虑分页/流式获取数据。
  • 502 Bad Gateway:此错误通常是中间代理服务器(如Nginx)因响应过大触发超时或缓冲区溢出。压缩响应能有效缓解,同时可排查代理服务器配置,比如增大缓冲区、延长超时时间。

注意事项

  • 需确保目标服务器支持你指定的压缩算法,否则服务器会忽略Accept-Encoding头,返回未压缩的响应。
  • 若使用Node.js 16及以下版本的fetch(需额外安装node-fetch包),可能需要手动用zlib模块处理解压,建议升级到Node.js 18+以获得自动解码支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:18