背景
我知道,并发情况下 http/2
有多路复用机制,无论多少个 http 请求,都只暂用一个 tcp。所以不会有请求阻塞。
下图一个 tcp 连接中多个 http 请求,,左边是 http/1.1
, 右边是 http/2
问题
但是,左边的图是在存在请求阻塞的情况下,才会先下载 style.css, 再下载 script.js
我们知道,浏览器在 http/1.1
中最大请求并发量一般是 6 个,6个请求以下的情况不存在阻塞。
那么,如果有 6 个 http 资源请求,
- 用
http/1.1
6个 tcp 并发下载 - 用
http/2
多路复用1 个 tcp,同样并发下载
哪一种下载会更加快,以及为什么?
首先http1.1同域请求限制6个tcp连接建立,但是,每个http1.1的TCP都是线头阻塞的
而http2是基于流进行数据请求的,几百个请求都是可以基于一个tcp连接传递,然后通过流id进行拼接返回到每个请求上,不存在线头阻塞并且只会用到一个tcp,对于服务器的并发量提高了6倍
并且http2还有头压缩对状态行和头信息进行哈弗曼编码压缩,还有静态字典动态字典相关等技术处理节省头信息优化传输浪费流量