持久HTTP连接Java

ast*_*ter 5 java tcp http httpurlconnection

我知道当使用HttpURLConnection时,Java会尝试为服务器的多个请求重用相同的TCP连接,除非服务器端存在限制.实际上,当我看到wireshark日志时,其中一个requestHeadersHTTP标头是Connection:keep-alive.但是当服务器返回数据时,我看到一个TCP [FIN,ACK]数据包从我这边发送回服务器.

这如何重用 tcp连接?

ini*_*mfs 3

在 HTTP 1.0 中,没有关于持久连接概念的官方规范。为了使持久连接正常工作,客户端请求通过添加标头来保持连接打开状态,Connection如下所示:

Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)

如果服务器决定连接应保持活动状态(即不关闭),则应使用标头进行响应:

Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)

然后在它选择的任何定义的时间段内保持连接处于活动状态。请注意,保持活动“功能”不是 HTTP 1.0 的官方协议功能,因此如果客户端请求,服务器不需要促进客户端的请求。

在 HTTP 1.1 中,它成为隐式的持久连接,因此如果您在使用 HTTP/1.1 标头响应的服务器上看到这种情况发生,则怀疑该服务器不遵守 HTTP 1.1 标准(除非服务器明确使用Connection值为 的标头进行响应Close) 。

然而,无论如何,服务器都会定义一个超时期限,在此期限内应发送后续请求,否则连接将被丢弃。这是为了防止客户端在未正确关闭连接的情况下断开连接而产生未关闭连接的垃圾邮件。

JavaHttpURLConnection对象尝试重用TCP 连接,但失败时将简单地回退到创建新的 TCP 连接。