转自:http://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=400294305&idx=1&sn=3522a64dd5324157c
现在我们使用的是Http1.1,互联网发展迅速,http这个基础协议也要升级了,http2.0就要来了
http2.0 的核心优势
(1)采用二进制格式传输数据,而非 http1.1 的文本格式,二进制格式在协议的解析和优化扩展上带来更多的优势和可能
(2)对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量,而 http1.1 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源,头压缩能够很好的解决该问题
(3)多路复用,就是多个请求都是通过一个 TCP 连接并发完成,http1.1 虽然通过pipeline也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 http2.0做到了真正的并发请求,同时,流还支持优先级和流量控制
(4)Server Push,服务端能够更快的把资源推送给客户端,例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求,当客户端需要的时候,它已经在客户端了
http2.0 的基础
http2.0 有一个根本性的改动,就是不使用文本格式了,采用了二进制格式
二进制更易于frame(帧 数据包)的实现
frame 就是 http2.0 的基础,可以把它理解为TCP的数据包一样,http2.0 之所以能够有如此多的新特性,正是因为底层数据格式的改变
http2.0 中 每次传输的数据视为数据流,整个数据被拆分放入多个 frame 中,每个 frame 中记录了此帧的数据长度、类型、所属数据流的ID
多路复用
http2.0 能对网络效率有较大提升,其中一个主要原因就是使用了‘多路复用’机制
先看下http1.1中多请求的处理方式
可以看到,要么是串行,一个请求完成后再发另一个请求,要么是可以并发,但请求结果的返回过程必须是顺序的,第一个响应完成后,才能响应第二个,即使第二个先处理完成,也要等待第一个,就产生了阻塞
http2.0 的处理方式
只要有了请求结果数据,可以立即返回,不关心顺序问题,因为数据都被组装成了一个个的frame帧,frame中记录了自己所属数据流的ID,客户端把frame都接收到以后,根据数据流ID再进行组装即可