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中文网,如若转载,请注明出处:https://codex-zh.com/posts/nodejs-fetch-econnreset-proxy-tls/
相关文章
Cloudflare 1010、403、WAF 拦截,怎么区分是源站还是 Cloudflare
Cloudflare 可能在请求到达源站之前就拦截,因此源站 access log 里完全没有记录。排查这类问题要同时看 Cloudflare 返回特征和源站日志,而不是只看浏览器页面。
Codex 返回 JSON parse error 怎么办?中转站响应格式排查
围绕「Codex 返回 JSON parse error 怎么办」给出面向 Codex 用户的原理、配置、操作步骤、排查方法与常见问题,适合新手直接照着实践。
Codex 流式响应卡住不结束怎么办?SSE 事件和代理缓冲排查
围绕「Codex 流式响应卡住不结束怎么办」给出面向 Codex 用户的原理、配置、操作步骤、排查方法与常见问题,适合新手直接照着实践。
GPT-6 正式进入 ChatGPT:这次更新到底改变了什么?
更新日期:2026 年 10 月 9 日。本文结合 OpenAI 最新官方资料整理;涉及社区体验的内容会单独标注。