HTTP/2 多路复用技术分享

什么是 HTTP/2

HTTP/2 就是超文本传输协议的第二个主要版本,是自1999年 HTTP 1.1 之后发布的首个更新,主要基于 SPDY 协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。

和 HTTP1.1 比起来有什么优势

1. HTTP/2采用二进制格式而非文本格式

2. HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行

3. 使用报头压缩,HTTP/2降低了开销

4. HTTP/2让服务器可以将响应主动“推送”到客户端缓存中

其中的 多路复用对前端优化性能有很大的帮助

什么是多路复用

在 HTTP 1.1 中,发起一个请求是这样的:

浏览器请求 url -> 解析域名 -> 建立 HTTP 连接 -> 服务器处理文件 -> 返回数据 -> 浏览器解析、渲染文件 

这个流程最大的问题是,每次请求都需要建立一次 HTTP 连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,而且逻辑上是非必需的,因为不间断的请求数据,第一次建立连接是正常的,以后就占用这个通道,下载其他文件,这样效率多高啊!

为了解决这个问题, HTTP 1.1 中提供了 Keep-Alive,允许我们建立一次 HTTP 连接,来返回多次请求数据。

但是这里有两个问题:

HTTP 1.1 基于串行文件传输数据,因此这些请求必须是有序的,所以实际上我们只是节省了建立连接的时间,而获取数据的时间并没有减少

最大并发数问题,假设我们在 Apache 中设置了最大并发数 300,而因为浏览器本身的限制,最大请求数为 6,那么服务器能承载的最高并发数是 50

而 HTTP/2 引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据。

HTTP/2 对同一域名下所有请求都是基于流,也就是说同一域名不管访问多少文件,也只建立一路连接。同样Apache的最大连接数为300,因为有了这个新特性,最大的并发就可以提升到300,比原来提升了6倍。

如何应用 HTTP/2

下面是我用 nodejs + express 实现的一个简单例子 ( HTTP/2 必须采用 SSL 安全连接)

打开 chrome 的调试器,可以看到 

这是基于  HTTP 1.1 

这是基于  HTTP 1.1 

这时基于 HTTP/2

现在 nginx、tomcat 都有支持 http2 的配置  

哪些浏览器支持  HTTP/2 

你可能感兴趣的:(HTTP/2 多路复用技术分享)