前言
HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。
HTTP发展历程
客户端----下单 服务端---发货 交易结束 #连接无法服用
客户端----下单1 服务端---发货1 客户端----下单2 服务端---发货2 客户端----下单3 服务端---发货3 #设置Connection:Keep-Alive,保持连接在一段时间内不断开 HTTP1.1支持
客户端----下单1 客户端----下单2 客户端----下单3 服务端---发货1 服务端---发货2 服务端---发货3 #HTTPpipelining:建立多个连接 HTTP1.1支持
客户端----下单1 客户端----下单2 客户端----下单3 服务端---订单1-包裹1 服务端---订单1-包裹2 服务端---订单2-包裹1 服务端---订单2-包裹2 服务端---订单3-包裹1 服务端---订单3-包裹2 #多路复用 HTTP2
浏览器阻塞
浏览器对于同一个域名,一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
1.基本介绍
HTTP2主要提升了性能,http2的所有帧都采用二进制编码
帧:HTTP2最小单位消息:逻辑上的http消息,由一个或多个帧组成
流:连接中的一个虚拟通道,可以承载双向的消息
HTTP2的连接都是持久化的
2.SPDY协议
SPDY协议是Google提出的基于传输控制协议(TCP)的应用层协议,通过压缩、多路复用和优先级来缩短加载时间。该协议是一种更加快速的内容传输协议,于2009 年年中发布。
GoogleChrome、MozillaFirefox以及Opera已默认开启SPDY。Google曾经称它的测试显示,页面载入提高了一倍。该协议是一种更加快速的内容传输协议。
SPDY协议设定的目标
1. 页面加载时间(PLT,Page • Load Time)降低 50%;
2. 无需网站作者修改任何内容;
3. 最小化配置复杂度,无需变更网络基础设施;
注:为了达到降低50% 页面加载时间的目标,SPDY 引入了一个新的二进制分帧数据层,以实现多向请求和响应、优先次序、最小化及消除不必要的网络延迟,目的是更有效地利用底层TCP 连接;
3. HTTP/2:SPDY的升级版
HTTP/2 是如何提高效率呢?
二进制分帧:HTTP 2.0 的所有帧都采用二进制编码
-
帧:客户端与服务器通过交换帧来通信,帧是基于这个新协议通信的最小单位。
-
消息:是指逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成。
-
流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1、2…N);
多路复用 (Multiplexing)
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。有了新的分帧机制后,HTTP/2 不再依赖多个TCP 连接去实现多流并行了。每个数据流都拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端把它们重新组合起来。HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。
请求优先级
-
把HTTP 消息分解为很多独立的帧之后,就可以通过优化这些帧的交错和传输顺序,每个流都可以带有一个31 比特的优先值:0 表示最高优先级;2的31次方-1 表示最低优先级。
-
服务器可以根据流的优先级,控制资源分配(CPU、内存、带宽),而在响应数据准备好之后,优先将最高优先级的帧发送给客户端。
-
HTTP 2.0 一举解决了所有这些低效的问题:浏览器可以在发现资源时立即分派请求,指定每个流的优先级,让服务器决定最优的响应次序。这样请求就不必排队了,既节省了时间,也最大限度地利用了每个连接。
HTTP/2的多路复用和HTTP1.1中的长连接复用有什么区别?
-
HTTP/1.0 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;
-
HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;
-
HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;
参考文章:http://mp.weixin.qq.com/s/jBOky6nld7XxZFecd7mIgA?scene=25#wechat_redirect