http2.0的新功能

  • 多路复用
  • 修改了http的数据格式(分帧), 二进制格式
  • 服务端主动推送
  • header压缩
  • 请求优先级的指定

新的二进制格式

在应用层和传输层之间增加了一个二进制分帧层

在分帧层中,会将传输的信息分割成更小的消息和帧,并采用二进制格式进行编码。在http1.x中的头部信息会被封装到HEADER frame,而相应的Request Body则封装到DATA frame 中。

关于http2.0中的三个概念如下:

  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧。
  • 帧:HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。

这些概念总结如下:

  • 所有通信都在一个 TCP 连接上完成,此连接可以承载任意数量的双向数据流。
  • 每个数据流都有一个唯一的标识符和可选的优先级信息,用于承载双向消息。
  • 每条消息都是一条逻辑 HTTP 消息(例如请求或响应),包含一个或多个帧。
  • 帧是最小的通信单位,承载着特定类型的数据,例如 HTTP 标头、消息负载,等等。 来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。

HTTP1.x 中,是基于文本协议的格式的。文本的表现形式有很多种,但是很难做到健壮

HTTP的性能优化主要是因为低延迟,HTTP/2可以让通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。

HTTP/2 中的新二进制分帧层解决了 HTTP/1.x 中存在的队首阻塞问题,也消除了并行处理和发送请求及响应时对多个连接的依赖。结果,应用速度更快、开发更简单、部署成本更低。

多路复用

影响一个网络请求的因素主要有两个,带宽和延迟。今天的网络基础建设已经使得带宽得到极大的提升,大部分时候都是延迟在影响响应速度。http1.0被抱怨最多的就是连接无法复用,和head of line blocking这两个问题。理解这两个问题有一个十分重要的前提:客户端是依据域名来向服务器建立连接,一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个。显然连接数并不是越多越好,资源开销和整体延迟都会随之增大。

连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。

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

多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。

总结:

  • 但连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大
  • 由于TCP连接的减少而是网络拥塞状况得到改善

表现如下:

  • 并行交错地发送多个请求,请求之间互不影响。
  • 并行交错地发送多个响应,响应之间互不干扰。
  • 使用一个连接并行发送多个请求和响应
  • 消除不必要的延迟和提高现有网络容量的利用率,从而减少页面加载时间。

header压缩

因为http中头部信息带有大量信息,而且每次都是重复发送的,所以使用encoder来减少需要传送的header的大小,并且通讯双方都会保存一份header fields,这样就避免了header的传输,也减少了需要传输的大小。

服务端推送

服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应。

原文连接: github.com/RachelRen/b…

参考文献:

HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

HTTP,HTTP2.0,SPDY,HTTPS看这篇就够了

HTTP/2.0 相比1.0有哪些重大改进?

HTTP/2 简介

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值