多个 TCP 连接来下载简单的网页和图像?

多个 TCP 连接来下载简单的网页和图像?

我创建了一个非常简单的网页:

<html>
<body>
foo bar
<img src="img1.png"/>
<img src="img2.png"/>
<img src="img3.png"/>
Hello world
</body>
</html>

每个图像都是一个 900 字节大小的简单彩色正方形(每个图像可装入一个 TCP 数据包)。

然后我使用 wireshark 记录 TCP 数据包,我预计只有一个连接/流,但实际上有 3 个。第一个请求 HTML 文件,获得响应,然后请求 img1.png,并获得其响应。其他 2 个连接分别获得 img2 和 img3。其他 2 个连接是在第一个连接完成之前建立的。

我认为 HTTP 1.1 不需要多个 TCP 连接?为什么浏览器不直接使用第一个连接呢?这样肯定更省钱?

我在 Safari、Chrome 和 Firefox 上尝试过,结果都相同。

答案1

现代浏览器使用多线程,因此使用多个线程从页面获取和处理各种元素/资源。

这样做是为了可以并行下载和处理资源,从而(可能/大概)使整体速度更快。

因此,不要:

Download -> Process -> Display -> Download -> Process -> Display -> Download -> Process -> Display

获取并显示三幅图像,是Download -> Process -> Display同时发生三件事。

这样,就可以处理和显示一种资源,而不必等待其他资源先完成。

想象一下,有 2 个小图像和 1 个大图像。两个小图像将立即显示,而无需等待大图像完成,因此可以更快地传递内容。

相关内容