stream disconnected before completion: stream closed before response.completed

2026年09月26日 19:15 10.03 秒 success

错误信息

stream disconnected before completion: stream closed before response.completed

AI 解决方案

原文:stream disconnected before completion: stream closed before response.completed
译文:流在完成之前断开连接:在响应完成前流已关闭


🎯 原因分析


此错误表示在流式传输过程中,客户端与服务端的连接在响应未完全完成时被意外终止。常见原因包括:
  • 服务端主动中断了流式响应

  • 连接超时或网络中断

  • 客户端提前断开连接

  • 中间件/代理主动关闭了连接
  • 💡 解决方案


    检查流式响应的处理逻辑,确保正确处理异常并实现重试机制:

    // 修复后的代码示例
    async function streamRequest(url) {
      const controller = new AbortController();
      const timeoutId = setTimeout(() => controller.abort(), 30000); // 30秒超时
    
      try {
        const response = await fetch(url, {
          signal: controller.signal,
          headers: {
            'Accept': 'text/event-stream'
          }
        });
    
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
    
        const reader = response.body.getReader();
        const decoder = new TextDecoder();
        let buffer = '';
    
        while (true) {
          const { done, value } = await reader.read();
          if (done) break;
    
          buffer += decoder.decode(value, { stream: true });
          // 处理接收到的数据...
        }
        
        clearTimeout(timeoutId);
      } catching (error) {
        if (error.name === 'AbortError') {
          // 处理超时逻辑
        } else {
          // 处理网络错误
        }
        clearTimeout(timeoutId);
        // 重试逻辑
      }
    }
    

    🛡️ 预防措施


  • 实现重试机制:对瞬时网络故障添加指数退避重试

  • 完善错误处理:对所有可能的流中断场景进行捕获和恢复

  • 设置合理超时:根据业务场景调整超时时间,避免过早中断

  • 使用开发工具:推荐使用浏览器开发者工具或Wireshark监控网络请求,定位中断原因