gpt4 book ai didi

java - 持久 HTTP 连接 Java

转载 作者:可可西里 更新时间:2023-11-01 02:32:08 25 4
gpt4 key购买 nike

我知道,当使用 HttpURLConnection 时,Java 会尝试重用 相同的 TCP 连接用于对服务器的多个请求,除非服务器端有限制。事实上,当我看到 wireshark 日志时,HTTP header 的 requestHeaders 之一是 Connection: keep-alive。但是当服务器返回数据时,我看到一个 TCP [FIN,ACK] 数据包从我这边发送回服务器。

这究竟是如何重用 tcp 连接的?

最佳答案

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

Connection: Keep-Alive

如果服务器决定连接应该保持 Activity 状态(即不关闭),它应该响应 header :

Connection: Keep-Alive

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

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

在任何情况下,服务器都定义了一个超时期限,在此期间应发送后续请求,否则连接将被断开。这是为了防止客户端在未正确关闭连接的情况下掉线时出现未关闭连接的垃圾邮件。

Java HttpURLConnection 对象尝试重用 TCP 连接,但失败时将返回创建新的 TCP 连接。

关于java - 持久 HTTP 连接 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20760243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com