我已阅读 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
错误代码 (-54) 之外的任何其他信息net.js 中的 onread
每个请求都会出现此问题 - 它不是间歇性的。
一些观察:
- 当从 chrome 或 postman 发出相同的请求时,请求不会失败
- 尝试使用相同的 header 重现来自 Chrome 的成功请求失败
- 将接受 header 设置为使用“gzip”等没有帮助 - 我已经尝试了所有建议,包括一些奇怪的建议,例如设置内容长度和向请求添加正文,尽管这是一个 GET 请求
- 错误总是出现在 net.js 中,但同时发生在 request 和 axios 库中
这是有趣的部分 - 我似乎只能在本地托管服务器时可靠地重现此问题。我可以通过 docker 容器访问开发实例或在 vagrant 中运行服务器,没有问题。
如果这有什么不同,我正在运行 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”错误的原因。当我删除代理端口时,问题已解决。检查您的网络设置。可能是重定向问题
关于javascript - Node.js HTTP GET “ECONNRESET” 读取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666079/