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

Node.js中Axios发起GET请求遇'read ECONNRESET'异常求助

Axios GET请求部署环境报ECONNRESET异常排查与解决

问题背景

Node.js环境中使用Axios发起GET请求,本地运行完全正常,但部署到生产/测试环境后抛出ECONNRESET连接重置异常,不确定是否需要显式配置HTTP代理。

代码片段

async function executeGetOperation(url, endPoint) {
let result;

const headers = {
'x-functions-key': endPoint.FunctionKey,
'Cache-Control': 'no-cache',
'Pragma': 'no-cache'
};
    
 await axios.get(url, {
 headers: headers
 })
.then((response) => {
result = response.data;
})
.catch((err) => {
result = null;
 console.error(err);
 })
return result;
}

异常信息

{
    "message": "read ECONNRESET",
    "name": "Error",
    "stack": "Error: read ECONNRESET\n    at TLSWrap.onStreamRead (node:internal/stream_base_commons:220:20)",
    "config": {
        "transitional": {
            "silentJSONParsing": true,
            "forcedJSONParsing": true,
            "clarifyTimeoutError": false
        },
        "transformRequest": [
            null
        ],
        "transformResponse": [
            null
        ],
        "timeout": 0,
        "xsrfCookieName": "XSRF-TOKEN",
        "xsrfHeaderName": "X-XSRF-TOKEN",
        "maxContentLength": -1,
        "maxBodyLength": -1,
        "env": {},
        "headers": {
            "Accept": "application/json, text/plain, */*",
            "x-functions-key": "****",
            "Cache-Control": "no-cache",
            "Pragma": "no-cache",
            "User-Agent": "axios/0.27.2",
            "host": "***"
        },
        "method": "get",
        "url": "*******"
    },
    "code": "ECONNRESET",
    "status": null
}

原因分析

  1. 网络环境差异:本地机器可能直接连通目标服务,或自动使用系统代理访问外部网络;而部署环境通常处于内网,必须通过指定代理才能访问外部服务,未配置代理会导致请求无法到达目标,触发连接重置。
  2. ECONNRESET本质:该错误表示TCP连接被对方(或中间网络设备)主动重置,常见于请求未成功抵达目标服务、防火墙拦截、代理配置缺失等场景。
  3. Axios代理自动读取限制:Axios默认不会自动读取系统代理配置(除非通过环境变量显式指定),部署环境若依赖代理,必须手动配置。

解决方案

1. 确认部署环境是否需要代理

在部署服务器上执行curl <目标URL>测试:

  • 如果curl也失败,提示无法连接,说明必须配置代理;
  • 如果curl成功,通过curl -v <目标URL>查看请求头,确认是否自动使用了代理。

2. 配置Axios代理

方案一:通过环境变量配置(推荐容器化部署)

在部署环境中设置以下环境变量,Axios 0.27.2会自动读取:

export HTTP_PROXY=http://your-proxy-host:port
export HTTPS_PROXY=http://your-proxy-host:port
# 内部地址无需代理的话,可设置NO_PROXY
export NO_PROXY=localhost,127.0.0.1,internal-domain.com

方案二:在代码中显式配置代理

修改Axios请求参数,添加代理配置:

await axios.get(url, {
  headers: headers,
  proxy: {
    host: 'your-proxy-host', // 代理服务器地址
    port: 8080, // 代理端口
    // 若代理需要认证,添加以下内容
    // auth: {
    //   username: 'proxy-username',
    //   password: 'proxy-password'
    // }
  }
})

3. 其他排查项

  • 防火墙/安全组检查:确认部署服务器IP已被目标服务的防火墙/安全组允许访问;
  • 超时配置:当前代码timeout:0表示无超时,可设置合理超时时间(如30000毫秒)避免长时间等待导致连接重置;
  • SSL证书验证:若目标服务是HTTPS,检查部署环境是否信任该服务的SSL证书(临时关闭验证仅用于排查,生产环境禁用):
    const https = require('https');
    await axios.get(url, {
      headers: headers,
      httpsAgent: new https.Agent({ rejectUnauthorized: false })
    })
    

内容的提问来源于stack exchange,提问作者Ranjan V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:35:27