序言
GOOGLE公司开发Chrome浏览器,并同时开发了SPDY协议,并且利用Chrome浏览器的占有率,将自家协议推为标准。在2015年,互联网标准化组织推出了以SPDY协议为蓝本的HTTP2协议。
HTTP2
HTTP2,传输的不再是文本,而是二进制流。文本的好处是人可以阅读,二进制流的好处是减少了文本带来的二义性,对于机器可以阅读。但是同时,HTTP2对于HTTP1.1是兼容的。
改为二进制传输后,带来了哪些好处呢?
-
首先是传输虚拟为流,类似于HTTP1中的大数据传输,将数据分为帧传输。这样做可以使用更高效socket传输方式。让我们回忆一下,Unix网络编程中有五种IO模型:
- BlockingIO,阻塞IO
- NoneBLockingIO, 非阻塞IO
- IO multiplexing, IO多路复用
- signal driven IO, 信号驱动IO
- asynchronous IO,异步IO
在HTTP1中,HTTP请求只能一条完整发送过去后才能发送另外一条,所以优化手段就是用多个线程。而HTTP使用虚拟流,就可以使用IO多路复用的方式来高效通信。这是HTTP2为了优化效率比较根本性的变化。 -
其次,压缩。除了采用高效的传输方式,将信息压缩小,也是一个优化手段。HTTP2中最大的优化就是头部压缩,这里的头压缩不是采用传统的压缩算法,而是经过统计,头部字段很多都是固定的并且很常用,头部很多时候占有几百上千个字节,每次传输都要带着庞大的头部。因此采用了“HPACK”算法,在客户端服务端建立字典,客户端头部传递的是头部编码,服务端收到后根据编码解析出头部。并且传递的时候会再用哈弗曼编码将头部整数字符串再进行一次编码,达到一个较高的压缩率。
-
HTTP2底层默认使用TLS协议,本身就是加密的
image.png
小结
HTTP2大大提升了性能,我们需要了解的就是HTTP2提升性能的背后的原理。通过原理我们可以看到,就是在基础知识基础技术上的优化,在七层协议上优化,把之前不敢想不敢变的底层进行变化。HTTP3也是延续同样的思路,将传输层的TCP协议更换为UDP协议,并且自制Quic协议作为控制协议,UDP和Quic组合减少了TCP协议很多不必要的复杂性,因而进一步提升了效率。
按照这样的思路,我们可以再畅想一下HTTP4是否会出现,会在哪个基础上动手呢?
网友评论