http2概述

209 阅读4分钟

本文写于2022.2.17,现在才发出来。文章写的不怎么样,但如果把本文的参考文献都看完的话,相信你一定会对http2有一个的不错的了解。

二进制帧

http1.1的报文是基于字符发送的,而在http2,所有的内容全部被转换成二进制帧发送。http头部对应headers frame,所要发送的数据对应Data frame。

因为使用了二进制,之前的针对二进制的压缩算法也就可以使用了。TCP协议存在慢开始机制,在开始的时候发送的数据较少,经过几个RTT之后。一次发送的数据才逐渐变多。使用了二进制之后,就可以在刚开始TCP有限的空间之下,发送更多的数据。

因为发送的是二进制数据,想要查看http报文就需要经过特定的软件,将二进制数据转换为字符串之后查看。

http2是在运输层的TCP/IP协议之上构建的(HTTP3将使用UDP)。

http2的发射通道和接受通道是流,流可以有1个或多个,每个流有相应的编号发送者可以选择对应的流,将要发送的帧放到相应的流中,然后传递给运输层。

在流只有一个的情况下,发送方仍可以存在多个用户同时发送数据而不会堵塞,这也就是多路复用的实现。

使用http1.1的时候,发送者发送出数据之后,要等到响应报文回来之后,才算完成了这次http请求,因此,如果想要同时发送请求更多的资源,就要同时开启多个http1请求。每个http请求占用一个TCP连接,多个http请求就意味着要开启多个TCP连接,这样开销就会极大的上升。

在http2,由于存在多路复用等机制,可以不用等待响应报文传送回来,就可以继续发送下一个请求报文,而且不需要更多的TCP连接,提升了资源的利用率。

流的优先级、流之间的互相依赖

为了使协议更高效的运转,并且满足其他一些必要的需求(比如区分任务的轻重缓急),每个流被分配对应的优先级,发送数据的时候,根据流的优先级来决定,先发送哪个流里面的数据,和发送时的带宽分配情况。

一个流可以依赖其他任何一个流,如果没有确定流的依赖,那么这个流依赖于root stream。最终会形成一个表达优先级的树,树的根部优先级最高,在下一层优先级其次,一个节点根据子节点的权重比例将此节点的资源分配给子节点。

流的权重是一个范围在1-256之间的整型数字。

头部压缩

在组织帧的时候,协议会将一些常用的头部字段转换成数字发送,接收方和发送方维护一个相同的头部字段映射表,根据这个表格进行编码和解码。

这个表格可以是静态的和动态形成的。

http2与https

HTTP2规范中有使用https和不使用https两种,但是现在所有设备所实行的http2规范都是模式使用https,相当于http2是安全的通信协议

服务器推送

服务器在客户端发送过来一个请求之后,可以预先发送客户端可能需要的资源,即预测。比如,客户端请求了www.example.com网页资源,而example网站中含有img1图片,此时服务器就可以不经过客户端请求直接向客户端发送img1的资源,客户端也避免了再次发送img1请求的开销。

但是,如果客户端有了img1的缓存,那么此次客户端推送就是无效的,并没有起到节省资源的效果。这种情况现在还没有得到有效解决。

http2与http1.1

http2不向下兼容http1.1,HTTP2相对于http1.1更像是一次升级,因为http2还是继续沿用http1.1的语法、语义等,HTTP2更改的只是协议的底层运作机制,使协议变得更高效。

如果通信双方,一方使用http1.1,一方使用http2,那么双方通信使用的协议还是http1.1。

参考

An introduction to HTTP/2 - SSL.com

HTTP/2 | 2020 | The Web Almanac by HTTP Archive

What Is HTTP/2 And How Do I Enable it on WordPress? (2021)

What is HTTP/2 - The Ultimate Guide by Kinsta

What is HTTP/2 | How it Differs from HTTP/1.1 and SPDY | Imperva

What is HTTP/2? | How Can It Benefit Your SEO?

Getting Ready For HTTP2: A Guide For Web Designers And Developers — Smashing Magazine

The Evolution of HTTP – HTTP/2 Deep Dive | Ably Realtime

An in depth overview of HTTP/2 · JBoss Community

Deep understanding of Web protocol (3): http 2 | Develop Paper

HTTP: HTTP/2 - High Performance Browser Networking (O'Reilly)

HTTP/2: 5 things every Enterprise Architect needs to know | Enable Architect

Dig deep: What is the true performance of HTTP2 - Moment For Technology