首页 > 技术文章 > 初识http2.0

mawn 2018-06-04 10:51 原文

 

本文参考https://juejin.im/entry/59b7e4266fb9a00a4f1b08ce

现在浏览器里面很大一部分网页还在使用HTTP1.1作为主要的网络通信协议。但由于时间太久远,美国IETF(国际互联网工作组)在Chromed的倡导下,开发了http2.0(借用Chrome的SPDY 来做为HTTP2的前身,即, HTTP2 是SPDY/3 draft的优优化版.)

他与http的差别有哪些?

  • http2.0是一个2进制协议,而http1.0是超文本传输协议(https://www.cnblogs.com/mawn/p/9131919.html)传输的内容是不一样的
  • http2.0遵循多路复用,就是代替同一个host下的内容,只建立一次链接。 多路复用技术是把多个低速信道组合成一个高速信道的技术,它可以有效的提高数据链路的利用率,从而使得一条高速的主干链路同时为多条低速的接入链路提供服务,也就是使得网络干线可以同时运载大量的语音和数据传输。
  • http2.0会使用HPACK进行头部的压缩,而http1.0不论什么请求都会发送
  • http2.0允许服务器预先将网页所需要的资源push到浏览器的内存中

 

 

HTTP2 binary

说道H2的二进制,首先得介绍一下H1的超文本协议.HTTP1.1每次在发送请求时,都需要找出 开头和结尾的每一帧的位置, 并且,在写入的时候,还需要删除多余的空格,以及选择最优的方式写入, 并且如果是HTTP+TLS的话,那性能损耗就比较呵呵了,因为TLS(安全传输层协议)本身的握手协议,以及加密的方式,在一定程度上会对文本信息的内容进行处理等等. 这些无疑都给HTTP1.1的速度造成了极大的影响.所以,HTTP2 不采用这种方式来,干脆直接使用二进制.,H2是怎样实现,二进制传输呢? 这里,借Grigorik在velocity 会议上的PPT,来看一看.

没错,H2是安放在应用层的协议,在接受服务器发送的来的请求时,自动将Header 和 Body部分区分开.

 

HTTP2 多路复用

在H1中,当发送多个请求时, 会有一种head-of-line blocking现象. 也就是我们经常看见的瀑布流式的加载方式,这样的加载方式,只能让资源按照顺序一个一个的加载。 会造成排队现象

前面一个资源内容超级多,并且都是一次性加载完,即使后面有更重要的资源,也需要进行等待.但在,H2中就没有这样的限制了. 他直接会将不同的资源,分拆为细小的二进制帧来进行传输.

 

当然,你也没必要担心,每一次是否会传输错误,因为实际上每一帧里面的格式为:

 

在传输的每一帧里面,会有如下属性来进行表示Length, Type, Flags, Stream Identifier, and frame payload.

only one Tcp connection

这个特性是建立在二进制传输的多路复用(multiplexed)的机制上的. 简而言之就是一句话:

  • 一个域只需要一个TCP连接

 

推荐阅读