HTTP2-特性
- 前置知识
- HTTP协议基于TCP协议,需要先建立TCP连接,进行三次握手后,才能进行HTTP的传输
允许TCP连接复用
-
对于HTTP1.1
- 每个请求都需要建立一个TCP连接,消耗时间和资源,浏览器为控制资源,单一域名下的连接并发数在6-8个
- 所以在1.1中,默认开启 Keep-Alive 参数,让服务端在响应后仍保持连接,让多个请求排队使用同一个TCP连接,一般保持15秒
-
对于HTTP2
- 对同一 Host IP的请求都复用一个TCP连接
解决队头堵塞
-
对于HTTP1.1
- 虽然Keep-Alive可以多个请求使用同一个TCP连接,但只能串行排队进行,第二个必须等第一个的响应返回,会造成阻塞
-
对于HTTP2
- 引入二进制帧,使得复用的一个TPC连接内可以并行发送多个请求,也就是说可以存在多条虚拟的通道,称为流,每条流都有唯一的标识和优先级
- 多个帧可以交错传输,然后根据帧首部的标识判断属于哪条流,重新组装
- 但如果传输过程出现丢包,还是会阻塞
- 引入二进制帧,使得复用的一个TPC连接内可以并行发送多个请求,也就是说可以存在多条虚拟的通道,称为流,每条流都有唯一的标识和优先级
头部压缩
-
对于HTTP1.1
- Header本身没有经过任何压缩,完全是纯文本传输
- 最占用体积的就是Cookie,尽管限制在4KB以内,但复杂页面上百个请求,这个传输累计量就很大
-
对于HTTP2
- 引入了HPACK头部压缩算法,包括
- 一套静态字典,存储常用的头部名和键值对
- 一套动态字典,动态增加内容
- 实际效果,能压缩76%
- 引入了HPACK头部压缩算法,包括