HTTP连接

HTTP连接

HTTP连接实际上就是TCP连接和一些使用连接的规则。

TCP为HTTP提供了一条可靠的比特传输管道。从TCP连接一端填入的字节会从另 一端以原有的顺序、正确地传送出来

image-20220224094620498

安全版本**HTTPS**就是在HTTP和TCP之间插入了一个〈称为TLS或SSL 的)密码加密层。

image-20220224094734829

HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP连 接按序传输。TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段 封装在IP分组中,通过因特网进行传输。

每个TCP段都是由IP分组承载,从一个IP地址发送到另一个IP地址的。每个IP 分组中都包括:

  • 一个IP分组首部(通常为20字节)

  • 一个TCP段首部(通常为20字节)

  • 一个TCP数据块(0个或多个字节)。

image-20220224095120890

承载TCP段的IP分组,承载了TCP数据流中的小块数据

TCP连接通过4个值来识别:【**唯一标识连接**

image-20220224095247616

HTTP连接的管理

Connection首部

防止无意中对本地首部的转发,“对首部的保护”

image-20220224103350199

串行事务处理时延

如果只对连接进行简单的管理,TCP的性能时延可能会叠加起来。

假设有一个包含了 3个嵌入图片的Web页面。浏览器需要发起4个HTTP事务来显示此页面: 1个用于顶层的HTML页面,3个用于嵌入的图片。如果每个事务都需要(串行地建立)一条新的连接,那么连接时延和慢启动时延就会叠加起来。

image-20220224103539476

同时,用户更希望同时加载多幅图片,而不是一张一张的加载。

串行加载的另一个缺点是,有些浏览器在对象加载完毕之前无法获知对象的尺寸, 而且它们可能需要尺寸信息来决定将对象放在屏幕的什么位置上,所以在加载了足够多的对象之前,无法在屏幕上显示任何内容。在这种情况下,可能浏览器串行装 载对象的进度很正常,但用户面对的却是一个空白的屏幕,对装载的进度一无所知。

解决方案

  • 并行连接

    通过多条TCP连接发起并发的HTTP请求。

  • 持久连接

    重用TCP连接,以消除连接及关闭时延。

  • 管道化连接

    通过共享的TCP连接发起并发的HTTP请求。

  • 复用连接

    通过共享的TCP连接发起并发的HTTP请求。

并行连接

HTTP允许客户端打开多条连接,并行地执行多个HTTP事务。在 这个例子中,**并行加载**了四幅嵌入式图片,每个事务都有自己的TCP连接。

image-20220224104152923

并行连接可能会提高页面加载速度

包含嵌入对象的组合页面如果能(通过并行连接)克服单条连接的空载时间和带宽限制,加载速度也会有所提高。时延可以重叠起来,而且如果单条连接没有充分利用客户端的因特网带宽,可以将未用带宽分配来装载其他对象。

image-20220224104412136

并行连接不一定会更快

如果并行加载多个对象, 每个对象都会去竞争这有限的带宽,每个对象都会以较慢的速度按比例加载,这样带来的性能提升就很小,甚至没什么提升。

打开大量连接会消耗很多内存资源,从而引发自身的性能问题。

实际上,浏览器确实使用了并行连接,但它们会将并行连接的总数限制为一个较小的值(通常是4个)。服务器可以随意关闭来自特定客户端的超量连接。

但并行连接确实可以让用户感觉到

持久连接

管道化连接

谢谢你的支持哦,继续加油.