前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Http1.x与Http2.0的区别

Http1.x与Http2.0的区别

作者头像
None_Ling
发布2019-05-24 09:49:47
1.4K0
发布2019-05-24 09:49:47
举报
文章被收录于专栏:Android相关Android相关Android相关

Http协议的进化史

随着Http协议发展的20年间,从物理带宽、CPU、内存,到软件都有了很大的提升,而原来的协议也具有了很大的局限性:

  • 性能低于带宽的使用率
  • Web的设计与维护变得更复杂
  • 客户端与服务端的资源消耗增加
  • 资源的缓存局限

Http协议发展史

而HTTP/2 的主要设计思想应该都是源自 Google的 SPDY 协议。

HTTP/2的优势

HTTP/2试图解决HTTP/1.1的许多缺点和不灵活之处。

  • Multiplexing and Concurrency:多个请求可以同时在同一个TCP链接中在耗时非常短的情况下成功发送,并且Response能够允许不按顺序被接收,在这过程中客户端与服务端不需要建立多个TCP链接。
  • Stream Dependencies:客户端可以告知Server,哪些资源可以优先传送
  • Header Compression:Http头压缩后,大小会被大大减小
  • Server Push:Server可以在客户端没有请求之前发送一些资源

Multiplexing and Concurrency的实现

Http1.x的问题

在Http1.x中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制,而超过限制数目的请求会被阻塞。

浏览器链接上限

而为了更快的加载速度,很多公司提供了多个静态资源的CDN域名,目的就是变相的解决浏览器针对同一域名的请求限制阻塞问题。

Http2.x的实现方案

Http2.0通过多路复用,同时将多个资源通过同一个TCP链接发送到客户端。相比于Http1.0而言,减少了建立多个链接握手的时间,并且能实现并发发送资源。

而且TCP协议存在滑动窗口,在开始时滑动窗口比较小,随着数据的传送,滑动窗口会慢慢变大,就是说每次建立新连接后,数据先是慢慢地传,然后滑动窗口慢慢变大,才能较高速度地传。

而Http1.x在创建完新连接后,没用多久就关闭了,所以滑动窗口一直都非常小,传送的数据也就会很慢。而Http2.x由于资源都是通过该链接发送的,所以滑动窗口在后面的传输中就会一直保持最大化,这样就减少了Http1.x的突发性与短时性。

所以,HTTP2中用一条单一的长连接,避免了创建多个TCP连接带来的网络开销,提高了吞吐量。

HTTP1.0与HTTP2.0对比

Http2.x的二进制分帧

应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层(Binary Framing)。

二进制帧

在BinaryFraming中,会将Http Header以及Http Request Data进行二进制编码,将数据放入Binary Framing这一层中。

HTTP2把数据分割成一个个二进制帧,然后为帧进行编号来区分不同的请求。但是:

  • 同一个请求的二进制帧必须是有序的,先进先出
  • 同一个TCP链接的请求可以是无序的,请求的帧可以相互穿插,这样提高了带宽的吞吐量

总结:

  • 单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大
  • 由于 TCP 连接的减少而使网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度变快

Header Compression

Http1.x的头部

HTTP1.x一直都是Plain Text(纯文本),方便阅读与抓包。而Https会把Plain Text加密成二进制数据。

Http2.x的头部压缩

HTTP2使用HPACK压缩来压缩头部,减少报文大小。以下图为例:

  • 由于头部有很多固定的报文,所以通过静态索引表的方式来维护头部的键值对,例如method:Get对应静态表中的2
  • 而不固定的报文,比如浏览器UA都不同,则会动态维护一张动态表,更新不固定的报文,例如user-agent:Mozilla/5.0对应62
  • 通过Haffuman编码,进一步压缩头部大小

Header Compression

Server Push

这个功能通常被称作“缓存推送”。主要的思想是:当一个客户端请求资源X,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。

这个功能帮助客户端将Z放进缓存以备将来之需。服务器推送需要客户端显式的允许服务器提供该功能。但即使如此,客户端依然能自主选择是否需要中断该推送的流。如果不需要的话,客户端可以通过发送一个RST_STREAM帧来中止。

Server Push

参考链接

Turn-on HTTP/2 today! HTTP 2 的新特性你 get 了吗? HTTP/2.0 相比1.0有哪些重大改进?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Http协议的进化史
  • HTTP/2的优势
  • Multiplexing and Concurrency的实现
    • Http1.x的问题
      • Http2.x的实现方案
        • Http2.x的二进制分帧
        • Header Compression
          • Http1.x的头部
            • Http2.x的头部压缩
            • Server Push
            • 参考链接
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档