【计网】HTTP2.0新特性 - Go语言中文社区

【计网】HTTP2.0新特性


引入

  • HTTP 2.0 的主要目标是改进传输性能(2015年),实现低延迟和高吞吐量。从另一方面看,HTTP 的高层协议语义并不会因为这次版本升级而受影响。所有HTTP 首部、值,以及它们的使用场景都不会变

  • HTTP1.1在使用时,header里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量。

  • HTTP 2.0 致力于突破上一代标准众所周知的性能限制,但它也是对之前1.x 标准的扩展,而非替代。之所以要递增一个大版本到2.0,主要是因为它改变了客户端与服务器之间交换数据的方式

HTTP2.0的新特性

1.二进制分帧

  • HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。

  • HTTP2.0就新增了二进制分帧层,不同于HTTP1.X使用换行符分割纯文本,二进制分帧层更加简洁,处理起来也更加高效。这里所谓的层,指的是位于套接字接口与应用可见的高层HTTP API间的一个新机制:HTTP语义,包括各种动词、方法、首部,都不受影响,不同的是传输它们的编码方式变了。

  • HTTP 1.X以换行符作为纯文本的分隔符,而HTTP 2.0将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码

  • HTTP 2.0 会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码 ,其中HTTP1.1的首部信息会被封装到Headers帧,而我们的request body则封装到Data帧里面。

这里写图片描述

2.多路复用(MultiPlexing),

  • 即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

  • HTTP/2 可以很容易的去实现多流并行而不用依赖建立多个 TCP 连接,即并行双向字节流的请求和响应

这里写图片描述

3.首部压缩

  • HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

  • HTTP2.0在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送

  • 首部表在HTTP2.0的连接存续期内始终存在,由客户端和服务器共同渐进的更新

  • 每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值

这里写图片描述

4.服务器推送

  • 服务器可以对一个客户端请求发送多个响应,除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。

  • 当浏览器请求一个html,服务器其实大概知道你是接下来要请求资源了,而不需要等待浏览器得到html后解析页面再发送资源请求,例如内嵌图片也可以理解为一种强制的服务器推送

  • 有了HTTP2.0的服务器推送,HTTP1.x时代的内嵌资源的优化手段也变得没有意义了。而且使用服务器推送的资源的方式更加高效。

这里写图片描述

5.请求优先级

  • 在HTTP消息被分解为很多独立的帧之后,就可以通过优化这些帧的交错和传输顺序,可以让最紧要的帧优先发送,以确保关键任务的快速展开。那么如何定义这些帧的发送顺序就是一个难题,为方便起见,在HTTP / 2标准允许每个流具有相关联的权重和依赖性

  • 每个HTTP2.0流里面有个优先值,这个优先值确定着客户端和服务器处理不同的流采取不同的优先级策略,高优先级的流都应该优先发送,但又不会绝对的。绝对地准守,可能又会引入首队阻塞的问题:高优先级的请求慢导致阻塞其他资源交付。分配处理资源和客户端与服务器间的带宽,不同优先级的混合也是必须的

HTTP2.0的现状

HTTP2.0作为新版本的网络协议肯定需要一段时间去普及,但HTTP本身属于应用层协议,和当年的网络层协议IPV6不同,离底层协议越远,对网络基础硬件设施的影响就越小。HTTP2.0甚至还特意的考虑了与HTTP1.x的兼容问题,只是在HTTP1.x的下面做了一层framing layer,更使得其普及的阻力变小。所以不出意外,HTTP2.0的普及速度可能会远超大部分人的预期。



本人才疏学浅,若有错,请指出
谢谢!

参考资料:HTTP 2.0 简明笔记

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/baiye_xing/article/details/73958631
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 19:56:34
  • 阅读 ( 1233 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢