Node.js HTTP GET"ECONNRESET"读取时出错



我已经阅读了SO和GitHub上关于这个错误的所有相关问题,但似乎没有一个能解决这种情况。

当我运行以下代码时:

response = await axios.get('http://localhost:8082/panda, {
httpAgent: new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 })
});

我得到以下错误:

{ Error: socket hang up
at createHangUpError (_http_client.js:345:15)
at Socket.socketOnEnd (_http_client.js:437:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9) code: 'ECONNRESET' }
{ Error: read ECONNRESET
at _errnoException (util.js:1019:11)
at TCP.onread (net.js:608:25)
code: 'ECONNRESET',
errno: 'ECONNRESET',
syscall: 'read',
etc...

除了onread调用之外没有堆栈跟踪,因此不清楚如何获得传递给net.js 中onread方法的ECONNRESET错误代码(-54)之外的任何其他信息

这个问题在每个请求中都会发生——它不是间歇性的。

一些观察:

  • 从chrome或poster发出相同请求时,请求不会失败
  • 尝试使用相同的头从Chrome复制成功的请求失败
  • 将accept头设置为使用"gzip"等并没有帮助——我已经尝试了所有的建议,包括一些奇怪的建议,比如设置内容长度和向请求添加正文,尽管这是一个GET请求
    • 这个错误总是出现在net.js中,但在request和axios库中都会出现

这里有一个有趣的部分-我似乎只有在本地托管服务器时才能可靠地再现这个问题。我可以通过docker容器访问dev实例或在流浪者中运行服务器,而不会出现问题。

如果有什么不同的话,我正在运行macOS Sierra 10.12.6。服务器是用Java编写的,并使用Spring框架。以下是我用于HTTP调用的RestTemplate配置:

@Bean
public RestTemplate restTemplate() {
//request timeout
int timeout = 5000;
//Connection Pooling factory with timeouts to prevent disastrous request responses
HttpComponentsClientHttpRequestFactory cf = new HttpComponentsClientHttpRequestFactory();
cf.setReadTimeout(timeout);
cf.setConnectTimeout(timeout);
cf.setConnectionRequestTimeout(timeout);
return new RestTemplate(cf);
}

我试过摆弄这些设置,但没有成功。

有什么想法吗?

我也有同样的问题。原因是在我的代理设置中。我将代理端口localhost:8080设置为localhost:3000。这就是为什么从我的NodeJS应用程序到localhost:3000的所有API请求都返回了;ECONNRESET";错误当我删除代理端口时,问题得到了解决。检查您的网络设置。也许是重定向问题

这是NodeJS的已知问题,已得到解决。请参阅http。代理:有关详细信息,空闲套接字引发未处理的ECONNRESET。

在MacOS 上打开端口时,还要确保您启用了正确的安全设置

最新更新