一、二进制分帧
帧:HTTP/2数据通信的最小单位消息:指HTTP/2中逻辑上的HTTP消息。例如请求和响应等,消息由一个或者多个帧组成。
流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有唯一的整数ID。
HTTP/2采用二进制格式传输数据,而非HTTP1.X的文本格式,二进制协议解析起来更高效。
二、头部压缩
HTTP/1.x会在请求和响应中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。
①HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送。
②每个新的首部键值对要么被追加到当前表的末尾,要么替换表中之前的值。
③首部表在HTTP/2的连续存储期内始终存在,由客户端和服务端共同渐进地更新。
(可以理解为只发送差异数据,而不是全部发送,从而减少头部的信息量)
三、服务器推送
服务器端可以在发送页面HTML时主动推送其他资源,而不用等到浏览器解析到相应位置,发起请求在响应。例如服务端可以主动把js和css文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。
服务器可以主动推送,客户端也有权利是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送给第三方资源给客户端。
四、多路复用
1.HTTP1.x中,如果想并发多个请求,必须使用多个TCP链接,且浏览器为了控制资源,还会对单个域名有6-8个的TCP链接请求限制。
2.HTTP2中:
①同域名所有通信都在单个连接上完成
②单个连接可以承受任意数量的双向数据流。
③数据流以消息的形式发送,而消息又由一个或者多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。