本文写于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