HTTP连接
HTTP连接实际上就是TCP连接和一些使用连接的规则。
TCP为HTTP提供了一条可靠的比特传输管道。从TCP连接一端填入的字节会从另 一端以原有的顺序、正确地传送出来
安全版本**HTTPS**就是在HTTP和TCP之间插入了一个〈称为TLS或SSL 的)密码加密层。
HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP连 接按序传输。TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段 封装在IP分组中,通过因特网进行传输。
每个TCP段都是由IP分组承载,从一个IP地址发送到另一个IP地址的。每个IP 分组中都包括:
一个IP分组首部(通常为20字节)
一个TCP段首部(通常为20字节)
一个TCP数据块(0个或多个字节)。
承载TCP段的IP分组,承载了TCP数据流中的小块数据
TCP连接通过4个值来识别:【**唯一标识连接**】
HTTP连接的管理
Connection首部
防止无意中对本地首部的转发,“对首部的保护”
串行事务处理时延
如果只对连接进行简单的管理,TCP的性能时延可能会叠加起来。
假设有一个包含了 3个嵌入图片的Web页面。浏览器需要发起4个HTTP事务来显示此页面: 1个用于顶层的HTML页面,3个用于嵌入的图片。如果每个事务都需要(串行地建立)一条新的连接,那么连接时延和慢启动时延就会叠加起来。
同时,用户更希望同时加载多幅图片,而不是一张一张的加载。
串行加载的另一个缺点是,有些浏览器在对象加载完毕之前无法获知对象的尺寸, 而且它们可能需要尺寸信息来决定将对象放在屏幕的什么位置上,所以在加载了足够多的对象之前,无法在屏幕上显示任何内容。在这种情况下,可能浏览器串行装 载对象的进度很正常,但用户面对的却是一个空白的屏幕,对装载的进度一无所知。
解决方案
并行连接
通过多条TCP连接发起并发的HTTP请求。
持久连接
重用TCP连接,以消除连接及关闭时延。
管道化连接
通过共享的TCP连接发起并发的HTTP请求。
复用连接
通过共享的TCP连接发起并发的HTTP请求。
并行连接
HTTP允许客户端打开多条连接,并行地执行多个HTTP事务。在 这个例子中,**并行加载**了四幅嵌入式图片,每个事务都有自己的TCP连接。
并行连接可能会提高页面加载速度
包含嵌入对象的组合页面如果能(通过并行连接)克服单条连接的空载时间和带宽限制,加载速度也会有所提高。时延可以重叠起来,而且如果单条连接没有充分利用客户端的因特网带宽,可以将未用带宽分配来装载其他对象。
并行连接不一定会更快
如果并行加载多个对象, 每个对象都会去竞争这有限的带宽,每个对象都会以较慢的速度按比例加载,这样带来的性能提升就很小,甚至没什么提升。
打开大量连接会消耗很多内存资源,从而引发自身的性能问题。
实际上,浏览器确实使用了并行连接,但它们会将并行连接的总数限制为一个较小的值(通常是4个)。服务器可以随意关闭来自特定客户端的超量连接。
但并行连接确实可以让用户感觉到