就时间而言,HTTP 请求是否嵌套?

Are HTTP requests nested, in terms of timing?

上下文:我正在制作一个网络服务器

示例: 假设有一个文件 index.htm 包含一些包含图像的标记。

首先,客户端向服务器发送请求index.htm。然后服务器用标记响应。

问题 1

在客户端发送第二次图像请求之前,服务器是否将所有标记发送给客户端?

客户端是否在从服务器接收到所有标记之前发送图像请求?

问题二

如果在进一步请求之前收到所有标记,是否关闭连接并为图像打开一个新连接?

客户端(浏览器)需要获取 HTML 文档才能决定接下来要加载哪些文件。这种设计有很多原因。我能想到一些,但其他人可能对此了解更多。

  1. 部分HTTP请求(大部分非人为请求)对图片文件不感兴趣
  2. Web 服务器(每小时可能接收数百万个请求)解析其传出的 HTML 文件(对于每个传入的 HTTP 请求!!)并破译内容是非常耗费人力和低效的图片可能需要发送。 HTML 的解析是浏览器的工作,浏览器必须非常详细地解析 HTML 出于与数据传输无关的其他原因(格式、布局、优雅地处理编码错误HTML).
  3. 嵌入的图片(来自不同域)通常存在于其他网络服务器上。显然,浏览器必须完成获取这些图片的工作。为什么不获取所有图片?
  4. 许多通过 HTTP 的数据传输与 JavaScript 相关。如果 Web 服务器必须分析传出页面的所有 JavaScript,那将是一场进一步的噩梦。处理 JavaScript 是(通常 and/or 主要)浏览器的工作。

注:一些网络服务器会处理 JavaScript 文件的预处理。还有一些基于 JavaScript 的 Web 服务器架构(最重要的是 node.js)。但这与你的问题不同。

你的第二个问题比较复杂。更高版本的 HTTP 允许为多个 GET 或 POST 事务重用相同的连接。我不是这里的专家。请阅读这里:

http://en.wikipedia.org/wiki/HTTP_persistent_connection

希望对您有所帮助。

Does the server send all the markup to the client before the client sends a second request for the image?

是的。只有在初始 HTML 文档被完全接收并成功解析后,客户端才会发起对 HTML 中提到的资源的请求。

这就是为什么性能意味着有必要尽快交付完整的 DOM。

If all markup is received before further requests, is the connection closed and a new one opened for the image?

这取决于。 HTTP 支持持久连接,但浏览器也可以尝试同时打开多个连接。