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

Axios中如何终止responseType为stream的HTTP请求?关于终止方式的疑问

Axios流式请求:AbortController与Readable.destroy()的配合使用

核心结论

仅调用Readable.destroy()不会自动取消底层的HTTP请求,建议同时使用AbortController.abort()和Readable.destroy(),才能彻底终止请求并清理资源。

具体原因

  • 层级分离:Node.js的Readable流是对HTTP响应数据的本地封装,销毁流只是终止了本地对数据的读取、处理流程,但底层的HTTP连接可能仍在接收服务器发送的数据,造成不必要的资源消耗。
  • AbortController的作用:AbortController.abort()是从HTTP请求层面发起中断,会通知服务器停止数据传输(如果服务器支持的话),同时Axios会终止请求的底层网络连接。

为什么你之前用AbortController没停止数据流?

大概率是使用方式问题:比如没有将AbortController.signal正确传入Axios的请求配置,或者目标API服务器没有处理HTTP中断信号(如Connection: close或Abort信号),导致服务器仍在发送数据,流还能继续接收。这种情况下,结合Readable.destroy()可以立刻终止本地流的处理,同时用AbortController中断请求,双管齐下。

正确的实现步骤

  1. 初始化AbortController并传入Axios请求:
const controller = new AbortController();
const { signal } = controller;

const response = await axios.get('/stream-api', {
  responseType: 'stream',
  signal,
});
  1. 需要终止时,同时执行:
// 中断HTTP请求
controller.abort();
// 销毁本地流,清理资源
response.data.destroy();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:42:45