前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP/2和HTTP/1.1的区别是什么?

HTTP/2和HTTP/1.1的区别是什么?

作者头像
小诸葛
发布2021-02-03 15:06:21
1.1K0
发布2021-02-03 15:06:21
举报
文章被收录于专栏:方法论方法论

1、什么是HTTP?

如果你对HTTP这个概念还不熟悉,请继续阅读本节的内容,如果你对HTTP这个概念熟悉,请跳过本节直接阅读下一节。

HTTP(超文本传输协议)是一个应用层协议,是目前万维网数据通信的基础。

HTTP基于C/S(客户端/服务器)模型。C/S模型可以解释为两台电脑,客户端电脑(接受服务)和服务端电脑(提供服务),它们通过请求和响应进行通信。

以酒店顾客和服务员来举一个简单又抽象的案例:顾客(客户端)向服务员(服务器)要了一份早餐(发送请求),然后服务员从酒店厨师那里(你的应用逻辑)获取到早餐并把它带给顾客。

这是一个非常简单的例子,但可以帮助你理解HTTP这个概念。

还有很多有趣的HTTP概念和实用工具就不过多讨论了,因为本文的重点是著名的HTTP/2。

2、什么是HTTP/2?

在2015年,国际互联网工程任务组(IETF)发布了HTTP/2:最有用的互联网协议HTTP的第二个版本,它是从早期具有实验性质的协议SPDY协议中衍生出来的。

开发HTTP/2的主要目标是:

  1. 完全兼容HTTP/1.1——包括方法、状态码、URI和请求头字段;
  2. 提高页面加载速度;
  3. 请求头压缩;
  4. 二进制协议;
  5. 服务端推送;
  6. TCP连接的多路复用;

2.1、请求的多路复用(TCP连接的多路复用)

HTTP/2在一个TCP连接上可以并行的发送多个请求。这是HTTP/2协议最重要的特性,因为这允许你可以异步的从服务器上下载网络资源。许多主流的浏览器都会限制一个服务器的TCP连接数量。

这减少了额外的往返时间,使得你的网站不需做任何优化就可以加载的更快,并使得域名分片变得不再重要。

2.2、请求头压缩

HTTP/2压缩了大量冗余的请求头帧。它使用HPACK规范作为一个简单又安全的方法来实现请求头压缩,客户端和服务端维护一个请求头列表。

HPACK会在每个请求头发给服务器之前对其单独的值进行压缩,具体实现方法就是:在之前发送过的请求头列表中查找已编码的请求头信息,来重新组成整个请求头信息。

2.3、二进制协议

HTTP/2在功能和属性方面有了显著的发展,比如从文本协议转换为了二进制协议。HTTP1.x通过处理文本命令来完成请求-响应循环。HTTP/2则是使用二进制命令来执行相同的任务。二进制协议减轻了构造的复杂性,并简化了由于命令包含文本和可选空格而易被混淆的命令的实现。

浏览器如果使用了HTTP/2的实现,会将命令转化为二进制再进行传输。

二进制协议的好处:

  1. 低开销的解析数据——HTTP/2相较于HTTP1的重要改进;
  2. 不易出错;
  3. 轻量级的网络封装;
  4. 高效的网络资源利用率;
  5. 压缩了命令的表示方法,使之更容易处理和实现;
  6. 使得服务器和客户端的数据处理更加的高效、健壮;
  7. 减少网络延迟并提高吞吐量。

2.4、服务端推送

这个能力允许服务器发送额外的信息给客户端,这些额外的信息客户端并没有请求但接下来很可能会用到。例如,如果客户端请求了资源X,而Y资源接下来很明显也会请求,服务器就可以选择把Y资源和X资源一起发给客户端,而不需等到客户端请求再发送。

服务端推送的好处:

  1. 客户端将推送的资源保存在缓存中;
  2. 客户端可以在不同的页面中重用这些缓存资源;
  3. 服务器可以将最初请求的资源和要推送的资源重用一个TCP连接;
  4. 服务器可以对推送的资源进行优先级排序——HTTP/2相对于HTTP1的关键性能区别;
  5. 客户端可以拒绝推送的资源以维护一个高效的缓存资源库,或者完全禁用服务端推送;
  6. 客户端也可以限制并发推送的流的数量。

如果你还记得上面关于酒店服务员和顾客的故事,那就是一个很好的例子。

对于HTTP/1.1和HTTP/2协议的一点区别。想象一下,服务员是一个TCP连接,而你想要点一份早餐和一瓶水。对于HTTP/1.1,就意味着你需要向一个服务员点一份早餐,再向另一个服务员点一瓶水,所以你需要分配两个TCP连接。对于HTTP/2,意味着你仅向一个服务员点餐,他会分两次将它们带给你。你仅仅需要分配一个TCP连接,同时也降低了服务器负载,并且服务器也空出一个连接(服务员)来服务下一个客户端(顾客)。

HTTP/2相对于HTTP/1.1的服务端推送的真正区别如下:

想象一下,顾客(客户端)向服务员(服务器)要了一份早餐(发送请求),然后服务员从酒店厨师那里(你的应用逻辑)获取到早餐,但是,服务员想到你也需要一瓶水,因此他将早餐和水头带给你了。最后的结果就是仅仅使用了一个连接,而且还是一个请求,这就大大降低了服务器的负载。

服务端推送实践案例:

下面我们用一个简单的例子来探究HTTP/1.1,HTTP/2和HTTP/2服务端推送的区别,我们用一个拥有100张图片的网页来测试。

这个例子中我们需要注意的是请求的数量、加载时间、协议列、启动程序列和瀑布图本身(我们可以看到如何通过多个批次发送请求,不幸的是,除了首字节响应时间和内容下载时间,很难看到其他数据)。

对于HTTP/1.1:

请求数量:102

加载时间:12.97秒

协议:http/1.1

启动程序列:第一个请求由用户(客户端)发起,其余的请求由意识到需要一些其他资源的客户端请求发起(在这里就是那100张图片)。

瀑布图:我们可以看到如何通过多个批次发送请求(即发送TCP连接)。

对于HTTP/2:

请求数量:102

加载时间:11.19秒

协议:HTTP/2

启动程序列:第一个请求由用户(客户端)发起,其余的请求由意识到需要一些其他资源的客户端请求发起(在这里就是那100张图片)。

瀑布图:我们可以看到如果通过两个批次(即两个TCP连接)发送请求。

注意加载时间。在这个案例中,它仅仅比HTTP/1.1小一点点,但实际中不会总是这样。这个案例展示了客户端请求的多路复用。

对于HTTP/2服务端推送:

请求数量:102

加载时间:3.17秒

协议:HTTP/2

启动程序列:第一个请求由用户(客户端)发起,其余请求由服务器推送发起(实际上就是一个请求响应循环)。

瀑布图:我们可以看到如何通过一个批次(一个TCP连接)发送请求。

3、使用HTTP/2来加速你的站点

HTTP/2给我们提供了许多新的技术来减少HTTP/1.1中的问题,这使得我们的web网页性能得到提高。目前,HTTP/2已被广大的web客户端支持,因此我们是不需要担心它的浏览器兼容性问题。虽然HTTP/2的实现很简单,你仍然需要记住,你可能必须更改技术实现(例如向客户端提供资源)来充分发挥HTTP/2的潜力!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小诸葛的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、什么是HTTP?
  • 2、什么是HTTP/2?
    • 2.1、请求的多路复用(TCP连接的多路复用)
      • 2.2、请求头压缩
        • 2.3、二进制协议
          • 2.4、服务端推送
          • 服务端推送实践案例:
            • 对于HTTP/1.1:
              • 对于HTTP/2:
              相关产品与服务
              文件存储
              文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档