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


22

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

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

Answers:


29

在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节


另一篇有趣的文章提到了同一个developer.mozilla.org/en-US/docs/Web/HTTP / ...
Ganesh Satpute

6

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

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


为什么Wireshark而不是Fiddler?
Pacerier 2015年

3
Fiddler是1.不是开源软件; 2.仅限Windows。
Vi。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.