HTTP/2带来了什么特性
QLUT 镜像站在圣诞节维护中带来了 HTTP/2 协议的支持。新协议提供了诸多新特性。
二进制分帧
HTTP/2所有性能增强的核心在于新的二进制分帧层,如下图所示,它是所有其他功能和性能优化的基础,它定义了如何封装HTTP消息并在客户端与服务器之间传输。
HTTP/2没有改动HTTP的应用语义,仍然使用HTTP的请求方法、状态码和头字段等规则,它主要修改了HTTP的报文传输格式。HTTP/1.1协议以换行符作为纯文本的分隔符,而HTTP/2将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们编码,这些帧对应着特定数据流中的消息,他们都在一个TCP连接内复用。
优先级排序
将 HTTP 消息分解为很多独立的帧之后就可以复用多个数据流中的帧,客户端和服务器交错发送和传输这些帧的顺序就成为关键的性能决定因素。HTTP/2 允许每个数据流都有一个关联的权重和依赖关系,数据流依赖关系和权重的组合明确表达了资源优先级,这是一种用于提升浏览性能的关键功能。HTTP/2 协议还允许客户端随时更新这些优先级,我们可以根据用户互动和其他信号更改依赖关系和重新分配权重,这进一步优化了浏览器性能。
首部压缩
HTTP 每次请求或响应都会携带首部信息用于描述资源属性。HTTP/1.1 使用文本的形式传输消息头,消息头中携带 cookie 每次都需要重复传输几百到几千的字节,这十分占用资源。
HTTP/2使用了HPACK算法来压缩头字段,这种压缩格式对传输的头字段进行编码,减少了头字段的大小。同时,在两端维护了索引表,用于记录出现过的头字段,后面在传输过程中就可以传输已经记录过的头字段的索引号,对端收到数据后就可以通过索引号找到对应的值。
多路复用
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求 - 响应消息,实现多流并行而并不依赖多个 TCP 连接,HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,并行地在同一个 TCP 连接上双向交换消息。
HTTP/2基于二进制分帧层,HTTP/2可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义交错发出去,在另一端根据流标识符和首部将他们重新组装起来。通过多路复用技术,可以避免HTTP旧版本的消息头阻塞问题,极大提高传输性能。
服务器推送
HTTP2.0 的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。如下图所示,客户端请求 stream 1,服务端在返回 stream 1 的消息的同时推送了 stream 2 和 stream 4。
服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对一个客户端的请求发送多个响应。如果一个请求是由你的主页发送的,服务器可能会响应主页内容、logo 以及样式表,因为服务端知道客户端会用到这些东西。这样不但减轻了数据传送冗余步骤,也加快了页面响应的速度,提高了用户体验。