在时间方面,HTTP请求是否嵌套?

时间:2015-01-12 18:53:13

标签: http tcp

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

示例:我们假设有一个文件 index.htm ,其中包含一些包含图片的标记。

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

问题1

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

OR

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

问题2

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

2 个答案:

答案 0 :(得分:1)

  

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

是。在完全接收并成功解析初始HTML文档之后,客户端将仅启动对HTML中提到的资源的请求。

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

  

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

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

答案 1 :(得分:0)

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

  1. 某些HTTP请求(大多数非人类请求)对图片文件不感兴趣。
  2. 对于Web服务器(可能每小时收到数百万个请求)来解析其传出的HTML文件(针对每个传入的HTTP请求!!)并解密可能需要发送的图片,这将是非常耗费人力和效率低下的。 。 HTML的解析是浏览器的工作,无论如何,由于与数据传输无关的其他原因(格式化,布局,优雅地处理HTML中的编码错误),必须非常详细地解析HTML。
  3. 通常嵌入的图片(来自不同的域)存在于其他Web服务器上。显然,浏览器必须完成工作才能获得这些图片。为什么不拍所有照片?
  4. HTTP上的大量数据传输与JavaScript相关。如果Web服务器必须分析传出页面的所有JavaScript,那将是另一场噩梦。处理JavaScript(通常和/或很大程度上)是浏览器的工作。
  5. 注意:某些Web服务器会处理JavaScript以进行文件预处理。并且有一些基于JavaScript的Web服务器体系结构(最重要的是,node.js)。但这与你的问题不同。

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

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

    希望有所帮助。