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调用之外,没有任何堆栈跟踪,所以目前还不清楚在ECONNRESET传递给onread方法的ECONNRESET错误代码(-54)以外的额外信息

每个请求都会发生这个问题 – 这不是间歇性的。

几点意见:

  • 当从chrome或邮递员发出相同的请求时,请求不会失败
  • 试图通过使用相同的头文件重现Chrome的成功请求失败
  • 设置接受头使用'gzip',等等..没有帮助 – 我已经尝试了所有的build议,包括一些奇怪的像设置内容的长度和添加一个正文的请求,尽pipe这是一个GET请求
    • 该错误总是出现在net.js中,但发生在请求和axios库中

这里有一个有趣的部分 – 当我在本地托pipe服务器时,我似乎只能可靠地重现此问题 。 我能够通过docker容器访问dev实例或者通过无用的方式运行服务器,没有问题。

我正在运行macOS Sierra 10.12.6,如果这有什么区别。 服务器是用Java编写的,使用Spring框架。 这里是我用于HTTP调用的RestTemplateconfiguration:

 @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); } 

我试着用这些设置搞乱了,没有运气。

有任何想法吗?

这是NodeJS的一个已知问题,已经解决。 请参阅http.Agent:空闲套接字抛出未处理的ECONNRESET的细节。

同时确保在MacOS上打开端口时启用了正确的安全设置