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.