Node.js fetch 报 ECONNRESET,怎么判断是不是代理或 TLS
ECONNRESET 表示 TCP 连接被重置。它可能发生在 TLS 握手、HTTP 请求中途或长流响应阶段。Chrome 能打开网页,并不能证明 Node.js 使用的代理和证书链同样正常。
ECONNRESET 表示 TCP 连接被重置。它可能发生在 TLS 握手、HTTP 请求中途或长流响应阶段。Chrome 能打开网页,并不能证明 Node.js 使用的代理和证书链同样正常。
一、为什么会出现这个问题

- DNS、TCP、TLS、HTTP 任何一层都可能失败,仅凭“网页能开”无法证明终端网络正常。
- 浏览器、Node.js、Python、终端可能使用不同代理或证书环境。
- 长连接和流式响应比普通网页请求更容易受到超时、连接重置影响。
- 公司网络、Cloudflare、Nginx 或第三方网关可能成为额外故障点。
二、推荐的排查顺序
1. 先做最小网络测试
分别测试 DNS、HTTPS 和目标 API,不要一上来就改项目代码。curl 能提供状态码、响应头、TLS 和耗时信息,是定位网络问题的第一工具。
2. 比较浏览器与终端
浏览器正常而 CLI 失败时,重点检查终端代理、Node/Python 证书和环境变量;两者使用的网络栈并不完全相同。
3. 观察失败是否有固定时间
如果请求总在 60 秒、100 秒、120 秒附近断开,通常要重点检查某一层固定 timeout;随机断开更像链路抖动或上游重置。
三、可以直接复制的排查示例
const url = process.env.OPENAI_BASE_URL + "/models";
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}` },
});
console.log(res.status);
console.log((await res.text()).slice(0, 1000));
四、使用建议
不要把 NODE_TLS_REJECT_UNAUTHORIZED=0 当长期解决方案,它会关闭 TLS 证书校验。
相关文章
Codex reasoning effort 配置错误怎么办?不同模型能力差异说明
围绕「Codex reasoning effort 配置错误怎么办」给出面向 Codex 用户的原理、配置、操作步骤、排查方法与常见问题,适合新手直接照着实践。
Codex 上游返回 502 HTML 页面怎么办?Cloudflare 与反代错误识别
围绕「Codex 上游返回 502 HTML 页面怎么办」给出面向 Codex 用户的原理、配置、操作步骤、排查方法与常见问题,适合新手直接照着实践。
Node.js 调 OpenAI 兼容接口,为什么 Python 能用但 Node 不行
同一个 Key、同一个地址,Python 正常而 Node.js 报错,通常说明差异出在 SDK 版本、环境变量、代理、TLS 或 baseURL 写法。两种 SDK 的参数命名并不完全一样。
Codex 调用 /responses 报错怎么办?Responses API 常见问题汇总
围绕「Codex 调用 /responses 报错怎么办」给出面向 Codex 用户的原理、配置、操作步骤、排查方法与常见问题,适合新手直接照着实践。