HTTP/2 比 HTTP/1 快在哪里?

深夜程猿

共 3358字,需浏览 7分钟

 ·

2023-07-19 17:40

编者按:


HTTP/2 比 HTTP/1 快在哪里?其底层的技术原理是什么?本文和你简单聊聊 HTTP/2 在一些技术细节上,是如何使其比 HTTP/1 更快。



1. 

HTTP/2 的来头


HTTP/2 是 HTTP 协议第二个版本,其目标是为了改进HTTP/1存在的不足,让应用访问网络更快。


HTTP/2是如何使网络访问「更快」的呢?


我们先来看看 HTTP/2 的“野心”:


  • 从基于文本的 HTTP/1.1 转换为二进制协议,数据传输效率更高

  • 支持请求多路复用,提高数据的访问速度

  • 更高效的HTTP 头部压缩,提升数据传输速度

  • 兼容 HTTP/1.1 标准定义的方法、状态代码、URI 和标头字段。客户端无需进行任何更改就可以像请求 HTTP/1 那样请求服务端

  • 支持设置请求优先级,确保更重要的资源得到更快的加载,以获得最佳用户体验

  • 支持服务器端推送资源给客户端,不需要客户端再次发送请求


也就是说,HTTP/2 比 HTTP/1 更牛x。同时客户端可以使用从 HTTP/1 迁移到 HTTP/2,无需做什么修改即可享受 HTTP/2 带来的高效。


2.

HTTP/2 如何实现其“野心”?


2.1 多路复用:允许同时发送多个请求和响应


HTTP/1 对每一个域名最多维护6个TCP连接,也就是说最多有六个TCP连接并发请求数据。但是TCP第一次启动有一个慢启动过程(这是我们无法避免的,为了减少TCP网络拥塞)。虽然启动了六个TCP连接请求数据,但每一个TCP都有一个慢启动过程,导致数据有一部分时间浪费在了慢启过程。


特别在带宽资源不足的时候(比如请求很多资源,占用带宽),TCP为了避免网络拥塞会自动降低网络请求速度,导致整体的数据请求速度都比较慢。


这些问题在 HTTP/2 中就不存在了。HTTP/2 使用多路复用技术,每一个域名只开启一个TCP连接,这样浪费在TCP慢启动的事件就变少了,也避免了下载大量数据导带宽资源不足从而降低TCP访问速度。


还有,HTTP/2还只是并发发起多条网络请求。在 HTTP/1 中,TCP连接虽然可以复用,但下一个请求需要排队等待上一个请求结束,网络请求速度必然造成拥堵。


下图描绘HTTP/2多路复用流程:HTTP/2同一个TCP中可以不用等待上一个请求结束,直接发起请求,每一个请求都有一个ID唯一标识。这样服务端,就可以随意处理而不用根据其请求的顺序。比如图中请求的顺序是3->2->1,响应顺序是2->1->3。

bac15ebb0e48fd3ab5596c4fb5119bfa.webp


图2.1.1 HTTP/2 网络多路复用流程图


2.2 压缩:压缩请求/响应头,以提高工作效率


这点没什么好说,就是运用一些算法压缩请求/响应头,这样数据在网络中传输速度会更快。在HTTP/2中用的是 HPACK 压缩算法。


2.3 设置请求优先级


客户端请求可以设置优先级。优先级更高的请求会优先得到服务端的处理。浏览器可以运用这一特性,在渲染网页时让更核心的资源请求的优先级更高。这样网页的渲染速度自然也得到提升,毕竟一些低优先级的资源可以在网页展示之后再加载也没有关系。


2.4 服务器推送:服务器可以在请求之前发送请求所需的其他信息


比如客户端访问A资源,服务端也知道客户端随后也会访问B资源,这样服务端就可以把B资源和A资源一起返回给客户端,客户端就不用再发起请求了。这样就提高了客户端访问的速度,比如网页的渲染。

2.5 更安全


HTTP/2 使用二进制传输数据,这样就减少攻击的可能。比如在 HTTP/1 中响应是文本格式,可能会被恶意插入一行文本来篡改响应头。


3. 

HTTP/2 的优缺点


通过上面介绍,我们知道 HTTP/2 相比 HTTP/1:


  • 支持设置请求优先级:留给客户端优化请求的空间更多。

  • 数据传输效率更高:HTTP/2 传输二进制流,HTTP/1是传输文本。

  • 多路复用:降低网络资源的占用,提高带宽使用率。

  • 更好的安全性。

. .... .


诚然,没有任何技术是银弹,HTTP/2 也有它的缺点。


HTTP/2 使用一个TCP连接处理所有请求,如果某一个请求丢包重试,会导致后面的请求被阻塞。如图,请求A重传,阻塞了请求D。



f3d33136b551dccb1e5cdd1bc426a437.webp

图3.1 HTTP/2 重传导致包阻塞


当然 HTTP/2 还有其他优缺点点,这里不继续探讨。读者可以从其技术实现细节去思考。



参考资料:


1、李兵:HTTP/2:如何提升网络速度?

2、https://www.upwork.com/resources/what-is-http2



浏览 102
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报