HTTP2前世此生

1、HTTP2的前世

在咱们所处的互联网世界中,HTTP协议算得上是使用最普遍的网络协议了。HTTP创建之初,主要就是为了将HTML从web服务器传送到客户端的浏览器。可是近几年web发展很是迅速,咱们的页面变得复杂起来,有不少动画效果以及ajax等技术获取服务端数据,来丰富咱们的页面展现,这些都是基于HTTP协议的。web

图片描述

咱们能够看到2015年之前很长一段时间都在使用HTTP1.x的协议,在1.0中比较突出的问题就是链接没法复用head of line blocking这两个问题。
链接没法复用会致使每次请求都经历三次握手和慢启动,三次握手无疑会增长了大量的延迟时间,尤为在高延迟的场景和移动端更为突出,在1.1以后Connection的默认值就是Keep-Alive,能够用一张图来体现他们的区别:ajax

图片描述

head of line blocking在第一个请求没有收到回复以前,后续发出的请求只能排队。一旦前一个请求的request由于什么缘由没有抵达服务器,或者response由于网络阻塞没有及时返回,影响的就是全部后续请求,这将会致使带宽没法被充分利用。在1.1中运用了管道技术(HTTP Pipelining)来解决这个问题,它把多个HTTP请求放到一个TCP链接中一一发送,而在发送过程当中不须要等待服务器对前一个请求的响应,一样用一张图来体现他们的区别:浏览器

图片描述

可是pipelining并不能完全解决holb的问题,好比只有GET,HEAD才能使用,POST不能使用,由于请求之间可能会存在前后依赖关系,而且在server端的response因为遵循FIFO的原则仍是要求依次返回,等其它缺陷。服务器

2、HTTP2应运而生

HTTP1.x依然存在一些问题,直到2012年google提出了SPDY的方案,经过多路复用、请求优先级、header压缩等功能来解决http1.x的遗留问题,可是google决定在2016年再也不继续支持SPDY开发。就在这个SPDY催化剂的做用下,HTTP2应运而生,并且其实HTTP2就是以SPDY为原型进行讨论和制定的。网络

3、HTTP2特性

HTTP2做为新版协议,改动了不少细节而且增长了一些新的特性,这里举例几个比较重要的特性:tcp

多路复用:经过多个request共享一个tcp链接的方式,一个request对应一个id,这样一个链接上能够有多个request,每一个链接的request能够随机的混杂在一块儿,接收方能够根据request的id将request再归属到各自不一样的服务端请求里面。这样解决了http1.x holb的问题,下降了延迟同时提升了带宽的利用率。性能

图片描述

HTTP1.1和HTTP2的区别可能就是这样了:测试

图片描述

请求优先级:多路复用致使全部资源都是并行发送,那么就须要优先级的概念了。把HTTP消息分解为不少独立的帧以后,就能够经过优化这些帧的交错和传输顺序,每一个流均可以带有一个31比特的优先值:0 表示最高优先级;2的31次方-1表示最低优先级。服务器能够根据流的优先级,控制资源分配(CPU、内存、带宽),在响应数据准备好以后,优先将最高优先级的帧发送给客户端。优化

首部压缩:HTTP2会压缩首部元数据,在客户端和服务器端使用“首部表”来跟踪和存储以前发送的键值对,对于相同的头部,没必要再经过请求发送。好比对同一资源的轮询请求的场景,全部首部都自动使用以前请求发送的首部,那么首部开销就是零字节。若是首部发生变化了,那么只须要发送变化的数据在Headers帧里面,新增或修改的首部帧会被追加到“首部表”。动画

图片描述

二进制分帧:HTTP2在应用层和传输层之间增长了一个二进制分帧层,将全部传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码,其中HTTP1.x的首部信息会被封装到Headers帧,而咱们的request body则封装到Data帧里面。

图片描述

而且HTTP2的通讯都在一个链接上完成,这个链接能够承载任意数量的双向数据流。经过这种单链接多资源的方式,能够更有效地利用TCP链接,减小服务端的压力,内存占用更少,链接吞吐量更大。

图片描述

服务器推送:服务端推送是一种在客户端请求以前发送数据的机制,HTTP2能经过push的方式将客户端须要的内容预先推送过去,因此也叫“cache push”。客户端若是退出某个业务场景,出于流量或者其它因素须要取消server push,也能够经过发送RST_STREAM类型的frame来作到。

4、HTTP2的此生

HTTP2不会是万金油,但抹了也不会有反作用。做为新版本协议确定须要一段时间去普及,HTTP自己属于应用层协议,和当年的网络层协议IPV6不一样,它离底层协议越远,对网络基础硬件设施的影响就越小。其次HTTP2还考虑了与HTTP1.x的兼容问题,所以在升级新版本的时候并不会带来太多的阻力。HTTP2最大的亮点在于多路复用,这对于浏览器的大型网站来讲确定是福音,一样移动端好比淘宝京东的APP,HTTP请求量很是大,HTTP2带来的性能提高仍是很是明显的。下图是官方的一个测试网站,使用了HTTP1.1和HTTP2同时请求数百张图片的时间差距仍是很是明显的:

图片描述

相关文章
相关标签/搜索