浏览器是否为每个 HTTP 请求创建新的 TCP 连接?

浏览器是否为每个 HTTP 请求创建新的 TCP 连接?

所以我知道 HTTP 基本上只是 TCP 上的文本协议,而 TCP 是基于状态/连接的。这意味着浏览器在执行 HTTP 请求之前必须通过 TCP 连接到服务器。那么问题是:浏览器通常会为每个 HTTP 请求创建一个新的 TCP 连接吗?

只要用户仍在该服务器上浏览,浏览器就可以打开 TCP 请求并使其保持活动状态,但这样服务器就必须使用大量的最大连接数来处理该请求。但话又说回来,如果浏览器为每个请求创建一个连接,并且用户在同一台​​服务器上浏览很多次,这似乎是一种浪费。它通常是如何工作的?也许通过使用计时器?

答案1

在 HTTP/0.9(不再使用)中,每个请求使用单独的 TCP 连接,并通过关闭连接来表示响应的结束。

Connection: Keep-Alive在 HTTP/1.0 中,单独连接仍是官方默认设置。但是,如果服务器支持,可以使用非官方但得到广泛支持的“ ”请求标头来请求持久连接。

在 HTTP/1.1 中,持久连接成为默认,而旧的单请求行为必须明确请求。通常使用多个(2-5)个持久连接。

(可选请求可能是流水线,尽管事实证明这很难实现并且产生的问题比它解决的问题还多(队头阻塞等),所以没有人使用 HTTP/1.x 流水线。)

HTTP/2(又名快闪记忆体) 专门设计用于同时多路复用多个请求。它有一个帧/分组层,允许响应以任何顺序甚至同时到达。

资源:维基百科文章RFC 2616 第 8.1 节

答案2

有“Connection: Keep-Alive”标头。请参阅维基百科了解详情。

您可以使用 Wireshark 捕获和分析连接并查看所有标头。

相关内容