stream disconnected before completion: Upstream request failed
错误信息
stream disconnected before completion: Upstream request failed
AI 解决方案
🌐 错误翻译
原文:stream disconnected before completion: Upstream request failed
译文:流在完成前断开:上游请求失败
🎯 原因分析
该错误表示流式连接(如 HTTP 流、SSE、WebSocket 等)在数据传输完成前被意外中断,根本原因是上游服务(Upstream)请求失败,可能包括:
- 上游服务器响应异常(如 5xx 错误、超时、拒绝连接)
- 网络不稳定导致连接中断
- 上游服务负载过高或宕机
- 请求被中间代理(如 Nginx、负载均衡器)主动关闭
💡 解决方案
1. 增加重试机制与容错处理
// 示例代码:使用 fetch 流式响应时的容错处理
async function streamRequest(url, options = {}) {
const maxRetries = 3;
let attempt = 0;
while (attempt < maxRetries) {
try {
const response = await fetch(url, {
...options,
signal: AbortSignal.timeout(30000) // 30 秒超时
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let result = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
result += decoder.decode(value, { stream: true });
}
return result;
} catch (error) {
attempt++;
if (attempt >= maxRetries) {
throw new Error(`流式请求失败(重试 ${maxRetries} 次):${error.message}`);
}
console.warn(`第 ${attempt} 次重试... 原因:${error.message}`);
await new Promise(resolve => setTimeout(resolve, 1000 * attempt)); // 指数退避
}
}
}
2. 服务端/代理配置检查
proxy_read_timeout、proxy_send_timeout 是否过小