我知道当使用HttpURLConnection时,Java会尝试在服务器没有限制的情况下重复使用同一TCP连接来发送多个请求。实际上,在查看Wireshark日志时,HTTP头中的一个requestHeaders是Connection: keep-alive。但是当服务器返回数据时,我会看到我的一侧向服务器发送了一个TCP [FIN,ACK]包。
那么这种TCP连接的“重用”是如何实现的呢?
那么这种TCP连接的“重用”是如何实现的呢?
Connection: Keep-Alive
Connection: Keep-Alive
紧接着,保持连接活动状态并选择任何定义的时间段。请注意,保持活动状态的“功能”不是HTTP 1.0的官方协议功能,因此服务器无需满足客户端的请求。
在HTTP 1.1中,它变得隐含的是持久连接,因此如果您在响应HTTP/1.1标头的服务器上看到这种情况,请怀疑该服务器没有遵循HTTP 1.1标准(除非服务器使用值为Close的Connection标头明确响应)。
无论如何,服务器都会有一个超时期限,在此期限内应发送后续请求,否则将断开连接。这是为了防止客户端在未正确关闭连接的情况下产生未关闭的连接垃圾邮件。
Java的HttpURLConnection对象尝试重用TCP连接,但失败后将简单地回退到创建新的TCP连接。