HTTP2 相比于之前版本有哪些提高
Youky ... 2021-10-11 About 1 min
# HTTP2 相比于之前版本有哪些提高
# 头部压缩
对于请求体的压缩,可以通过Content-Encoding
来指明。
而当请求十分复杂时(尤其是对于 GET 请求,几乎都是请求头),对于请求头本身的压缩也十分有必要。
因此,HTTP2 针对头部字段,采用了HPACK
压缩算法:
- 在服务器和客户端之间建立哈希表,对于已经使用过的字段,后续将索引传递给对方即可。
- 对整数和字符串进行哈夫曼压缩
# 二进制分帧 & 多路复用
HTTP2 的多路复用,从协议层面解决了 HTTP 的队头阻塞问题。
队头阻塞:前面的报文没有收到回复时,阻塞后续所有报文的回复
采用的方法是二进制分帧:
- 将报文全部转成二进制的 01 串,因此报文被分成了一个个二进制的帧
- 在一个 TCP 连接上,可以进行多个数据帧的通信
- 多个帧之间是无序的,但对于一个报文来说,它的不同帧是按序的
# 服务器推送
服务器除了响应客户端请求外,还可以主动发送内容。如请求了 HTML 文件后,服务器主动发送里面引用的 css 文件和图片等。如 NGINX 的配置:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
http2_push /style.css;
http2_push /example.png;
}
1
2
3
4
5
6
2
3
4
5
6