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

Xeo*_*n06 29 networking browser tcp http

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

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

use*_*686 33

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

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

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

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

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

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


Vi.*_*Vi. 7

有“连接:保持活动”标题。有关详细信息,请参阅enwiki

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

  • Fiddler 是 1. 不是开源软件;2. 仅限 Windows。 (5认同)