Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP代理时(非HTTPS),TCP连接TIME_WAIT时,代理无法连接服务器 #261

Open
jaejaking opened this issue Feb 23, 2023 · 3 comments

Comments

@jaejaking
Copy link

jaejaking commented Feb 23, 2023

我用的InterceptHttpProxyServer跑的程序,里面加了两行打印,某次测试时发现只打印了请求,没有回复的消息,如下图:
image
所以我又仔细测试了一下,
客户端ip:192.168.1.20,
服务端IP:192.168.1.52,
服务端端口:10222,
测试方法:postman通过proxyee访问服务端接口。
发现当proxyee访问了一次服务端接口之后,这次是成功的,此时服务端和客户端的TCP连接状态都是ESTABLISHED,说明正常通信;期间不再进行接口访问。
等待大约1分钟,通过netstat命令发现客户端已没有和10222创建的TCP连接,此时在服务端利用netstat发现刚刚的TCP连接变为TIME_WAIT状态(该状态会维持1分钟),说明客户端和服务器断开连接。
在服务端TCP处于TIME_WAIT的时候,用postman通过proxyee再请求服务端,此时proxyee与服务器连接不上!具体如下图:
image
但如果再次重新利用postman发起请求,就可以连接上(也就是说在服务端TIME_WAIT之后的第一次连接是连接不上的),此时看服务端的TCP状态,发现他新建了一个TCP连接(此连接可以正常通信),原先的连接仍然处于TIME_WAIT状态,如下图:
image
请教一下大神,这是为什么?该如何解决 @monkeyWie @er1c @xyzj91 @smichea

@jaejaking
Copy link
Author

从请求过程(4次挥手)来看,既然服务端出现了TIME_WAIT,说明了服务断开是服务器发起的,也就是说代理是被迫断开的。所以应当代理在处理完本次请求后,应当主动断开本次连接。

@monkeyWie
Copy link
Owner

所以现在问题应该是在后端服务主动关闭TCP连接的时候代理服务没有处理吗

@jaejaking
Copy link
Author

不好意思,重新补充回复一下,我用的是postman测试的,所以才会出现我截图描述的这一堆问题,但是Apipost没出现类似问题,您看看这些发现对您有帮助吗?

所以现在问题应该是在后端服务主动关闭TCP连接的时候代理服务没有处理吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants