Http2.0 笔记:多快好省

发布 : 2020-09-11

Http 2.0 笔记多快好省

我用周总理的话来总结一下,“多快好省”和下面这张图来方便记忆。

image-20200911172101503

核心二进制分帧

在 Http1.1 的基础上加入了一个二进制帧层面。

  • 在 http1.0 时代一个资源就一个 http 链接,这样太浪费TCP链接了,比如说一个网页上有两三图片。
  • 因此到了http1.1 时代规定每次完成请求后tcp链接会多保存一会儿。这样在加载多个图片的时候可以复用一个tcp。这样就可以复用多个图片了。
  • http1.1 依然有问题,我得先加载第一个图片,才能再发起加载第二个图片的请求。为什么不能同时加载这两个资源呢?
  • 因此到了http2.0的时代,我们需要在一个tcp上需要有额外的东西来表示这个资源属于哪个图片。就是帧头部,每个帧都有自己独立的帧头部。帧作为运输的最小单元。进行运输。帧头部便可以包含许多信息。比方说我这个帧他属于哪个资源,或者说那个流?也可以包含这个帧是不是要被尽快的处理。

二进制分帧和TCP概念以及实现的功能

从这里我们感受到了http2.0 和tcp的设计很相似。基于二进制的帧,可以模仿实现TCP中已经存在许多功能。

  • 资源优先级:TCP的报文头部中URG标志位。而帧头部中同样存在这个。实现资源的优先控制。
  • 流量控制:报文中可以交代那个资源不需要这么快的发送过来。
  • 服务器推送:基于流的协议可以实现主动的推送。
  • 多路复用:同一个tcp上实现不同数据的多段传输。因此实现了多路复用功能。

首部压缩

首部中有什么 method:get 这样的字符,这样的字符非常冗余,因为每次都要传,积累起来浪费的流量可以说就成千上万了。我们可以适当的用压缩技术来将这些字符压缩一下。这样就节省了首部的流量。关于首部压缩具体的文章可以参考:https://segmentfault.com/a/1190000017011816。

本文作者 : Rothleer
原文链接 : https://rothleer.github.io/2020/09/11/Http2.0%20%E7%AC%94%E8%AE%B0%EF%BC%9A%E5%A4%9A%E5%BF%AB%E5%A5%BD%E7%9C%81/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

博客已萌萌哒运行(●'◡'●)ノ♥
Theme - BMW | Made With 💗 | Powered by GodBMW