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

Jor*_*dan 10 javascript java spring node.js axios

我已经阅读了SO和GitHub上有关此错误的所有相关问题,但它们似乎都没有解决这种情况.

当我运行以下代码时:

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

我收到以下错误:

{ 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...
Run Code Online (Sandbox Code Playgroud)

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

每个请求都会出现此问题 - 它不是间歇性的.

一些观察:

  • 当从chrome或邮递员提出相同的请求时,请求不会失败
  • 尝试使用相同的标头从Chrome重现成功的请求失败
  • 设置接受标头使用'gzip'等等没有帮助 - 我已经尝试了所有的建议,包括一些奇怪的建议,如设置内容长度和添加一个主体到请求,尽管这是一个GET请求
    • 错误总是出现在net.js中,但同时发生在请求和axios库中

这是有趣的部分 - 当我在本地托管服务器时,我似乎只能可靠地重现这个问题.我能够通过docker容器到达dev实例或在vagrant中运行服务器,没有问题.

如果这有任何区别,我正在运行macOS Sierra 10.12.6.服务器是用Java编写的,并使用Spring框架.这是RestTemplate我用于HTTP调用的配置:

@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);
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过乱搞这些设置而没有运气.

有任何想法吗?

Ben*_*rst 1

这是 NodeJS 的一个已知问题,并且已得到解决。有关详细信息,请参阅http.Agent:空闲套接字抛出未处理的 ECONNRESET

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