http发展之路 http2.0(二)

476 阅读3分钟

大家好,我是鼠目。「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

HTTP2.0的出现,相比于http1.x,在性能上有了极大的提升。本章内容主要介绍,http2.0与http1.x相比,做了哪些改动。

首先,让我们来看一段话

在客户端与服务器之间仅建立一个tcp连接,而且该连接在交互持续期间一直处于打开状态。在此连接上通过逻辑流进行传递,每一条消息包含一个完整的帧序列。经过整理,每一个帧序列表示一个响应或请求。

通过这一段话,我们将得到第一个信息。http2.0将只维持一个tcp通道。 我们知道http1.1,是每个域名下维持多个tcp通道,然后通过域名分片来完成多个http并行传输,提高性能的。这样虽然一定程度减少了客户端的发起多个请求时的响应时间,但也不可避免造成了服务器端的压力变大。(一个客户端可以同时建立多个tcp通道)

而http2.0是怎么通过一个tcp通道,完成多个请求的同时发送的呢?

答案是,http2.0通过二进制分帧达到了多路复用的目的。同时也就解决了http1.x队头阻塞的问题。这也是http2.0的核心

http2.0改变了数据传输的方式,使用了二进制传输。它引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。
而之前的http都是基于文本格式进行传输的。

接下来统一说一下http2.0的特性
  1. 二进制传输

二进制的方式进行传输,以帧为最小单位

  1. 多路复用

帧代表最小传输单位,每个流代表一个请求,是多个带有标志位的帧组成的数据流。多路复用就是在一个tcp连接中存在多条流。

  1. 头部压缩

http1.x的请求头有很多都是重复字段,http2.0在客户端服务端维护索引表,对传输的header进行压缩编码,只需要传递键名就可以在各自端中找到对应的值。

  1. 服务器端推送

请求某个资源时,根据服务器配置,主动推送其他的资源。比如,你只请求了http,服务器就会把对应的css和js一起推送过来。

  1. 优先级

对每个流指定优先级,决定处理的顺序和分配的资源。

  1. 流控制

阻止发送方向接收方发送大量数据的机制

http的不足

不过http2.0也有它的不足之处,毕竟它是基于tcp协议的。它虽然解决了http的队头阻塞问题,但是tcp本身存在的队头阻塞它并不能解决。甚至因为它本身只有一个tcp进行传输的原因,在某些网络波动比较大的环境下,它表现出的性能甚至不如http1.1。这也是http2.0没有完全普及开的原因之一。 正式由于tcp本身的局限性,未来的http3.0将会基于谷歌制定的新协议QUIC(基于udp的低时延的互联网传输协议)。