参考地址:
1, HTTP/1.1 存在的问题
- TCP 连接数限制
- 线头阻塞 (Head Of Line Blocking) 问题
- Header 内容多,而且每次请求 Header 不会变化太多,没有相应的压缩传输优化方案
- 明文传输不安全。
- 为了尽可能减少请求数,需要做合并文件、雪碧图、资源内联等优化工作
2,Http2.0 特点:
- 二进制分帧层 (Binary Framing Layer)(response 头字段均小写)
- 多路复用 (MultiPlexing) 在一个 TCP 连接上,每帧的 stream identifier 的标明这一帧属于哪个流,然后在对方接收时,根据 stream identifier 拼接每个流的所有帧组成一整块数据。 流的概念实现了单连接上多请求 - 响应并行,解决了线头阻塞的问题,减少了 TCP 连接数量和 TCP 连接慢启动造成的问题。
- http2 对于同一域名只需要创建一个连接
- 服务端推送 (Server Push) 浏览器发送一个请求,服务器主动向浏览器推送与这个请求相关的资源,这样浏览器就不用发起后续请求。【省略后后续的get 时间】
- Header 压缩 (HPACK) 使用 HPACK 算法来压缩首部内容
- 应用层的重置连接
HTTP/1 来说,是通过设置 tcp segment 里的 reset flag 来通知对端关闭连接的。这种方式会直接断开连接,下次再发请求就必须重新建立连接。HTTP/2 引入 RST_STREAM 类型的 frame,可以在不断开连接的前提下取消某个 request 的 stream。
-
请求(流的)优先级设置
-
流量控制
3, 流的状态:idle reserved(local & remote ) open half-closed(local & remote ) closed; 以上也是流的生命周期。 其中reserved 都只能发送对应生命周期内的某些帧数据。
4,优化点:
- 开启压缩 配置 gzip 等可以使传输内容更小,传输速度更快
- 使用缓存
- CDN 加速
- 减少 DNS 查询
- 减少重定向