1. what?

①. 2009年,Google的工程师提出了HTTP的替代方案SPDY,Http 2就是在SPDY的基础上发展起来的.

2. HTTP2的优势:

三大特点:多路复用、头部压缩、Server Push

(1). 传输优势(多路复用):

①. HTTP2中的数据传输都是以最小单位帧去传输的.

②. 对某一个域名所有的请求和响应都在一个TCP连接上完成交互:
    a. 对同一个域的服务器只建立一次TCP连接,加载多个资源.

③. 数据没有大小的限制(HTTP/1.1单个包有1460字节约1.5K的大小限制),只要带宽足够:
    a. HTTP2使用二进制帧传输,同时会对http头部进行压缩.

④. 数据帧之间可以乱序发送:
    a. 并行交错的请求和响应而且之间互不干扰.
    b. HTTP2内部再根据帧首部的流标识ID再进行重新组装.

(2). HTTP2的多路复用技术:

数据以帧(frame)的格式在同一个连接传输,并且服务还可以提前Push一些资源给客户端.

①. 通过客户端与服务端之间的一个socket连接通道:
    a. 传输的内容不再是必须有序的.
    b. 可以无序可以在一个套接字上交错地发送请求和响应,请求和响应之间互不影响.

②. 所有请求和响应都无法相互阻塞.

③. 消除不必要的延迟,从而减少页面加载的时间.

(3). 二进制编码:

①. http1.1传统的文本流传输形式存在一些解析上的复杂性.

②. http2使用二进制方式不存在这个问题.

③. http/2的二进制形式并没有改变http/1.1的体系,只是把传输报文格式改了(如图):
    a. 头部帧:Headers frame
    b. 数据帧:Data frame

(5). 报文头压缩:

①. 利用了HPACK压缩方式大大减少了网络传输过程中首部的体积大小.

②. 客户端发了两次请求:
    a. 第一次请求有完整的http报文头部.
    b. 第二次请求只有一个path的字段不一样,只需要发送一个path的字段即可.
    c. 大大减少了发送的量.
    d. 要求客户端和服务同时维护一个报文头表.
    e. 在动态请求时可能只需要发送几个字节的数据,但却需要发送一个几百个字节的报文头.

(4). 反模式:

①. HTTP/1.1优化性能的方法:
    a. 域名拆分、资源内联、资源合并、禁用cookie的域名、生成精灵图片

②. HTTP2这些方法将不再起作用、完全没有必要.

(5). Server Push:

①. 在http1.1/2中可以看到第一个资源html没加载之前,其它资源是不会开始加载的.
    a. 因为它们是html触发加载.

②. http2可以提前把可能会用到的资源先push给客户端,不用等到请求的时候再发送:
    a. 这样可以提高页面整体的加载速度
    b. nginx官目前暂不支持Server Push.
    c. http2的Node.js包支持.

3. 客户端不支持http2?

①. 如果浏览器不支持http/2,还是能够正常打开的:
    a. 建立https连接时需要先握手.
    b. 浏览器或客户端会发送一个Client Hello的包.
    c. 这个包里面会说明它是否支持http2(如图).

②. nginx就能够根据握手信息决定是否使用http/2,如果客户端不支持就使用http/1.1.