HTTP/2即超文本传输协议2.0,是HTTP/1.1下一代的协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工做小组进行开发。
是自1999年HTTP/1.1发布后的首个更新。HTTP/2.0在2013年8月进行首次合做共事性测试。在开放互联网上HTTP/2.0将只用于"https://" 网址,而 "http://" 网址将继续使用HTTP/1。
目的是在开放互联网上增长使用加密技术,以提供强有力的保护去遏制主动攻击。
css
一个网页加载的时候须要一些数据(css、js、图片等)这些请求是并发地向服务器发送的,并发的发送过程当中就须要并发地建立TCP链接(一个请求对应一个TCP链接)。
一方面浏览器有并发链接数的限制,好比chrome限制一次性最多并发6个请求;若是请求建立TCP链接的并发请求一次超过6个,超过的请求就必须等待前面6个请求收到服务器的返回以后才能继续发送剩余请求。
这种等待,就算是一种相对串行的传输,效率不高;另外一方面:因为不一样请求须要创建不一样的TCP链接,同时进行6次TCP的”三次握手”,那么建立链接的开销是比较大的;
同时对于一个服务器来讲,它可建立的TCP链接数确定是有上限的,若是每次都要建立6个TCP链接会致使服务器的TCP链接数很快被消耗完。因此在HTTP/1.1的这种方式下,数据传输的效率是受到很大制约的。html
那为何不直接共用一个TCP链接呢?由于在HTTP/1.1里面发送请求,在同一个TCP链接上发送数据必须是等待一个请求发送完成以后,才能发送第二个请求;同时服务器端也是要先把前一个请求的数据所有返回以后,才能返回第二个请求的数据。
若是在服务器中第一个请求处理(执行)特别慢,第二个请求即便比第一个请求先执行完成,也要等待第一个请求返回客户端后,才能返回。若是在HTTP/1.1中客户端与服务器端之间复用同一个TCP链接,那么数据传输就是一个串行而非并行的过程,效率较低。web
能够在同一个TCP链接中实现客户端与服务器端之间多个请求的并行发送。chrome
采用分帧传输的数据传输方式。在分帧的方式中,每一帧都有上下帧的联系,意思是传输当一个http请求的信息时,并不必定要按照连续的方式进行发送,而是能够把信息分红不一样的帧一块儿发送。
若是中间的帧先到服务器,没有关系,等服务器把请求数据所有接收完以后,会根据帧信息里包含的前后顺序,把帧进行组合,获得一个真正的数据。得益于分帧传输与信道复用功能,使得在HTTP/2中,同一个链接能够并发地发送多个不一样的请求。浏览器
服务器能够主动向客户端传输数据:
以前的HTTP版本服务器只能接收客户端发送的请求,并根据请求返回数据。而不能主动地自发地向客户端发送数据,可是HTTP/2实现。安全
总的来讲:在HTTP/2中,得益于信道复用与分帧传输的好处,网站开启HTTP/2以后,每个用户访问一个网站(网站会向服务器请求各类网页资源)的时候,永远只须要在浏览器(客户端)和服务器之间建立一个TCP链接。
由于在HTTP/2中一个TCP链接上彻底能够实现数据的并发发送与返回,没有阻塞等待的过程,并且服务器端还能根据需求主动地向客户端(浏览器)推送一些信息,这就是HTTP2的优点。服务器
举个例子:咱们知道一个web页面加载会要求一些html、css、js等文件,它们都是以连接的形式在html文本里面显示的,经过浏览器解析了html里面的内容以后,再根据连接里面包含的URL地址再去请求对应的css和js文件。
在HTTP/2以前,这里个传输过程会存在一个顺序问题。须要先请求到html的文本而后在浏览器里面运行解析了这个文本以后,咱们才能去发送css的请求和js的请求。
HTTP/2中有了推送(Sever Push)功能以后,在请求html的同时,服务器端能够主动把html里面所引用到的css和js文件经过同一个TCP链接并行地推送到浏览器(客户端)。
这样html、css和js的发送就是并行而非串行,总体的传输效率和性能提升了很多。网络
官方测试网站 https://http2.akamai.com/demo/http2-lab.html
官网提供了多种版本的对比测试有HTTP1.1与HTTP2的比较,还有服务器端推送(server-push)不一样个数之间的比较:(因为网络延迟不一样,测试结果或有差别)
并发
HTTP1.1与HTTP2的对比:Compare HTTP1.1 (HTTP) vs HTTP2 (HTTPS):
能够看到分别使用HTTP/1.1和HTTP/2加载同一张由多张小图片组成的大图片:HTTP/1.1用了39.45s,而HTTP/2只用了5.56s。HTTP2比HTTP/1.1快了将近7倍。
由于为了加载这张大图,须要请求许多的小图,HTTP/1.1采用的是串行地请求,因此速度要比采用并行请求的HTTP/2要慢上许多。性能
HTTP2中服务器端发出推送(server-push)个数不一样的比较:Compare HTTP2 vs HTTP2 server-push (30 objects pushed):
能够看到同是HTTP/2,不使用Server Push的用时44.36s,使用Server Push的用时35.14s。使用Server Push与否对HTTP/2性能的影响不大。HTTP/2总体的性能提高主要在于总体的信道复用和分帧传输的设计上。
这使得客户端与服务器之间只须要一个TCP链接并发地发送数据了。因此总体来讲,对比于HTTP/1.1总体性能提高是很是大的。