二进制分帧
http报文的形式组成是比较熟悉的,当他们以http报文出现在运输层时,udp不拆分,tcp以字节流形式拆分。
也就是http报文在传输过程中是以一种顺序流的形式传递的,因为http报文没有准确说明报文形式的内容
如果我们想让不同的http报文混在一起传递,这样需求来自于http连接的管道化处理,如果想了解管道化技术上的可以自行搜索
总的需求就是在tcp持久连接下进行多个请求并行发送。
http报文没有拆分识别和重组的中间协议,所以HTTP2.0设计了这样的协议,将http转换成二进制帧的形式,每一个二进制帧中设定用于标明二进制帧信息和http首部的信息以及http报文体数据部分。
这样使得多个http请求能够并发的传递,至于多个http请求并发执行,效率是否提高的问题,可以看看其他的人的文章,在不同情况下,得到结果不同,有可能甚至起到了反作用
多路复用
多路复用就是基于二进制帧的管线化技术
首部压缩
在说首部压缩前,首先的知道,拿到一个http报文,报文不是直接按照http原样的形式直接传递的,需要进行一定的处理,比如说你的报文体部分写进去的是文本或者其他数据格式,这种数据可是占用存储空间多,需要一定的转换,也就是压缩
而报文首部字段是不经过处理的,直接以文本的形式传递,自然会占用很多空间,而且首部字段的长度都是不低的,不同的浏览器厂商都要根据自身设置不同的字段
并且很多字段都是知道的,所以为了减少头部的开销,维护出了一个哈希表,使用哈希表来将字段映射相应的内容,然后客户端和服务端都共同维护这个哈希表
服务器推送
最后是服务器可以根据请求,主动推送一些客户端可能用到的内容,这也是有效利用带宽,减少网络请求,加快网页响应速率的一种表现形式