# http2.0
# HTTP1.1 存在问题
- HTTP1.1 的 HTTP 队头堵塞:一个 TCP 连接只能通过一个 HTTP 请求,万一堵塞的话,影响到后续请求
- 虽然浏览器对同一个域名支持 6 个 TCP 连接,但是每次 TCP 连接成本很高,存在启动慢的问题
- 头部太大
- 只能主动请求,不能被动接收
解决方式:
- 多路复用
- 二进制分帧
- 头部压缩
- 服务器推送
# 多路复用
同一时刻一个 TCP 连接,发送了多个 HTTP 请求
一个 TCP 连接上可以有任意数量的流
- 流(Stream):已建立的 TCP 连接上的双向字节流,可以承载一个或多个消息
- 消息(Message):一个完整的 HTTP 请求或响应,由一个或多个帧组成。特定消息的帧在同一个流上发送,这意味着一个 HTTP 请求或响应只能在一个流上发送。
- 帧(Frame):通信的基本单位
# 二进制分帧
一条 HTTP 响应,划分成了两个帧来传输,并且采用二进制来编码。
# 头部压缩
静态字典
HTTP/2 针对头部字段,也采用了对应的压缩算法——HPACK,对请求头进行压缩 传递索引
# HTTP 队头阻塞
当 http 开启长连接时,共用一个 TCP 连接,同一时刻只能处理一个请求
解决:
- 二进制分帧 一个 HTTP/2 连接上可以同时发多个帧
- 帧
- 流 二进制帧的双向传输的序列 Stream ID 排序
- 多路复用
# 服务器推送
# 开启 HTTP2.0
Nginx 版本支持 直接开启 node (opens new window)