导语:
访问内部网站,发现时间一长会报ECONNRESET错误,一开始以为是后端的正常报错,就去搜了一下,但是没查到主要原因,
后面查阅资料研究了一下,实际上可能是会话时间过长,服务器关闭客户端的tcp链接的原因。
问题情况
偶然和同事一起打开自己内部的测试平台,然后都发现了报错ECONNRESET,然后任何的接口都访问不出来,均以上这个报错。
我本地没有切换switchhost,也没有进行其他操作,原则上tcp的会话链接会一直存在,也不会掉线。(因为我重新又刷了n次页面)
查阅了资料,网上有个说法:
在长连接的前提下,服务端先于客户端关闭了 TCP,而客户端此时还未同步状态,所以存在一个错误的暂态(客户端认为 TCP 连接依然在,但实际已经销毁了)
因为会话也会存在使用时间,如果长时间不操作页面,服务器会提前断开与客户端的tcp链接,也就关闭了会话。
这是一个说法
网上资料情况总结
所以类似以下这些情况均有可能会发生报错ECONNRESET
客户端与服务端成功建立了长连接
- 连接静默一段时间(无 HTTP 请求)
- 服务端因为在一段时间内没有收到任何数据,主动关闭了 TCP 连接
- 客户端在收到 TCP 关闭的信息前,发送了一个新的 HTTP 请求
- 服务端收到请求后拒绝,客户端报错 ECONNRESET
在看我们今天情况,很有可能是第四点:服务端收到请求后拒绝,客户端报错 ECONNRESET。
服务端拒绝,在正常运行或者非偶然情况下有可能会拦截,那就得定位下服务器的问题