[英]Persistent HTTP connection Java
我知道当使用HttpURLConnection时,Java会尝试为服务器的多个请求重用相同的TCP连接,除非服务器端存在限制。 实际上,当我看到wireshark日志时,HTTP标头的requestHeaders
之一就是Connection:keep-alive。 但是当服务器返回数据时,我看到TCP [FIN,ACK]
数据包从我这边发送回服务器。
这如何重用 tcp连接?
在HTTP 1.0中,没有关于持久连接的官方规范。 为了使持久连接正常工作,客户端通过添加Connection
头来请求保持连接打开:
Connection: Keep-Alive
如果服务器决定连接应保持活动(即未关闭),则应响应标头:
Connection: Keep-Alive
然后保持连接在其选择的任何定义的时间段内保持活动状态。 请注意,保持活动“功能”不是HTTP 1.0的官方协议功能,因此如果客户端请求服务器,则不需要服务器来促进客户端的请求。
在HTTP 1.1中,它隐含了持久连接,因此如果您在使用HTTP / 1.1标头响应的服务器上发现这种情况,则怀疑服务器不遵守HTTP 1.1标准(除非服务器显式响应具有值的Connection
标头) Close
)。
然而,在任何情况下都存在由服务器定义的超时时段,其中后续请求应该被发送,否则连接被丢弃。 这是为了防止客户端在没有正确关闭连接的情况下丢弃未封闭连接的垃圾邮件。
Java HttpURLConnection
对象尝试重用 TCP连接,但在失败时将简单地回退到创建新的TCP连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.