HTTP连接管理1
HTTP是如何使用TCP连接的
TCP连接
世界上几乎所有的HTTP通信都是用TCP/IP承载的,一旦连接建立起来了,在客户端和服务器的计算机之间交换的报文就永远不会丢失、受损或失序
TCP的可靠数据管道
TCP为HTTP提供了一条可靠的比特传输管道
从TCP连接一端填入的字节会从另一端以原有的顺序、正确的传送出来
TCP会按序、无差错的承载HTTP数据
TCP流是分段的、由IP分组传送的
TCP的数据是通过名为IP分组或者叫IP数据报的小数据块来发送的
TCP属于传输层,IP位于网络层
HTTP发送报文时,通过一条打开的TCP连接进行有序,正确的传输
TCP会将数据分割成一个个数据块,并将块封装在IP分组中
IP分组中包括
一个IP分组首部
IP首部包括从哪个IP发往哪个IP即源和目地IP地址,长度和其他一些标记
一个TCP段首部
TCP首部包括TCP端口、TCP控制标记,排序规则
一个TCP数据块
保持TCP连接持续不断的运行
在任意时刻计算机都可以有几条TCP连接处于打开状态.TCP是通过端口号来保持所有这些连接持续不断的运行
HTTP的优化,包括并行连接、Keep-alive(持久连接)和管道化连接
常被误解的connection首部
HTTP的connection首部字段中有一个由逗号分隔的连接标签列表,这些标签为此连接指定了一些不会传播到其他连接中去的选项
Connection首部可以承载3种不同类型的标签,因此有时会很令人费解
· HTTP首部字段名, 列出了只与此连接有关的首部
· 任意标签值,用于描述此连接的非标准选项值
· 值close,说明操作完成之后需要关闭这条持久连接
在将报文转发出去之前,必须删除Connection首部列出的所有首部字段
串行处理事务时延
如果每个事务都需要一条新的连接,那么连接时延和慢启动时延就会叠加
串行加载的缺点--布局时延
某些浏览器在对象加载完毕之前无法获取对象的尺寸,而且它们可能需要对象的尺寸来决定将对象放在屏幕的何处,所以在没有加载足够多的对象之前,屏幕是空白的,这种情况下,可能内部加载机制是正常的,但用户一无所知,造成用户体验度恶劣
web架构前端代码设计思想 关于串行加载
由于串行加载的缺点
可以这样,将需要载入的图片,显示的提供宽度和高度,这样 浏览器就可以知道对象资源的尺寸,将其安排在屏幕的某处位置当中了
并行连接
并行连接并不一定更快
如果并行加载多个对象,而此时带宽不高,每个对象都会去竞争这有限的带宽,每个对象都会以较慢的速度按比例加载,这样带来的性能提升就很小,甚至没什么提升
并且 打开大量连接会消耗很多内存资源,从而引发性能问题
一般来说,浏览器的并行连接数4个,服务器端可以随意关闭来自特定客户端的超量连接数
并行连接可以让用户"感觉"更快一些
因为用户可以直观看到页面的加载情况和变化
持久连接
在事务处理结束之后 让然保持在打开状态的TCP连接被称为持久连接
重用已对目标服务器打开的空闲持久连接,就可以避开缓慢的连接建立阶段。而且,已经打开的连接还可以避免慢启动的拥塞适应阶段 以便更快速的进行数据的传输
持久以及并行连接
并行连接的一些缺点
1. 每个事务都会打开/关闭一条新的连接,会耗费时间和带宽
2. 由于TCP慢启动特性的存在,每条新连接的性能都会有所降低
3. 可打开的并行连接数量实际上是有限的
管理持久连接时要特别小心,不然就会累积出大量的空闲连接,耗费本地以及远程客户端和服务器上的资源
持久连接分类
1. 古老的HTTP/1.0+ keep-alive连接
2. 现代的HTTP/1.1 persistent 连接
keep-alive选项
keep-alive首部只是请求将连接保持在活跃状态,发出keep-alive请求之后,客户端和服务器并不一定会统一进行keep-alive会话,可以在任意时刻关闭空闲的keep-alive连接,并可以随意限制keep-alive连接所处理的事务的数量
timeout 参数是响应首部发送的,估计了服务器希望将连接保持在活跃状态的时间
max 参数是响应首部发送的,估计了服务器还希望为多少个事务保持此连接的活跃状态
keep-alive首部完全是可选的,但只有在提供Connection: Keep-Alive时才能使用它

浙公网安备 33010602011771号