1.HTTP2概述
HTTP2是基于SPDY的,专注于性能,最大的一个目标是在用户和网站之间只建立一个连接。
2.HTTP2的特性
主要有以下五个特性:
(1)二进制传输:将请求和响应数据分为更小的帧,并且采用二进制编码。
(2)Header压缩:采用HPACK算法压缩头部,同时同一个域名下的两个请求,只会发送差异数据,减少冗余的数据传输,降低开销。
(3)多路复用:同一个域名下所有的通信都是在单个连接上完成的,单个连接可以承载任意数量的双向数据流,数据流以消息形式发送,而消息由一个或多个帧组成,可以乱序发送。
(4)服务端推送:服务端可以新建“流”主动向客户端发送消息,提前推送客户端需要的静态资源,减少等待延迟。
(5)提高安全性:HTTP2也是明文的,只不过是二进制的,但HTTP2都是https协议的,运行在TLS协议上。
HTTP2 Stream
HTTP2 Stream如下图所示:
每个Stream就像HTTP1的TCP连接,它保证了承载的Headers Frame(存放HTTP Header)、Data Frame(存放HTTP body)是有序到达的,多个Stream之间可以并行传输。
3.HTTP2的请求和连接过程
HTTP2的请求和连接过程分为以下6个步骤:
(1)浏览器准备好请求数据,包括请求行、请求头等信息,如果是POST方法,还有请求体。
(2)这些数据经过二进制分帧层处理之后,会被转换为一个个带有请求ID编号的帧,通过协议栈讲这些帧发送给服务器。
(3)服务器收到所有帧后,会讲所有相同ID的帧合并为一条完整的请求信息。
(4)服务器处理该条请求,并将处理的请求行、响应头和响应体分别发送至二进制分帧层。
(5)同样,二进制分帧层会将这些响应数据转换为一个个带有请求ID变啊后的帧,通过协议栈发送到浏览器。
(5)浏览器接收到响应帧后,汇根据ID编号将帧的数据提交给对应的请求。
4.HTTP2存在的问题
HTTP2虽然大幅提升了HTTP1.1的性能,然而,基于TCP实现的HTTP2遗留下三个问题:
(1)有序字节流引出的队头阻塞(Head-of-line blocking),使得HTTP2的多路复用能力大打折扣。
(2)TCP与TLS叠加了握手时延,建链时长还有1倍的下降空间。
(3)基于TCP四元组确定一个连接,这种诞生于有线网络的设计,并不适合移动状态下的无线网络,这意味着IP地址的频繁变动会导致TCP连接、TLS会话反复握手,成本高昂。