IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 快速了解HTTP/2 -> 正文阅读

[网络协议]快速了解HTTP/2

HTTP/2新特性

  1. 二进制分帧
  2. 多路复用(请求和响应复用)
  3. 服务器推送
  4. 头部压缩

二进制分帧(Binary framing layer)

HTTP/2的所有性能增强的核心是新的二进制帧层,它规定了HTTP消息如何客户端和服务端之间封装和传输。HTTP/2通信都被拆分成更小的消息和帧,每个都以二进制格式编码。

二进制分帧到底有啥用?看看后面两个模块就知道了。

流、消息和帧

HTTP/2 术语解释

  • 流(Stream):已建立连接中的双向字节流,可以携带一条或多条消息。
  • 消息(Message):映射到逻辑请求或响应消息的完整序列
  • 帧(Frame):HTTP/2中最小的通信单元,每个都包含一个帧头,它至少标识了该帧所属的流。

术语的关系

  • 所有通信通过一个TCP连接执行,该连接可以携带任意数量的双向流。
  • 每个流都有一个唯一标识符和可选优优先级信息,用于携带双向消息。
  • 每条消息都是逻辑HTTP消息,例如请求或响应,它由一个或多个帧组成。
  • 帧是承载特定类型数据(例如,HTTP标头、消息有效负载等)的最小通信单元。来自不同流的帧可以被交织,然后通过嵌入在每个帧头中的流标识符重新组合

HTTP/2 将 HTTP 协议通信分解为二进制编码帧的交换,然后将其映射到属于特定流的消息,所有这些都在单个 TCP 连接中多路复用。

请求和响应复用(Request and response multiplexing)

HTTP/1.x的交付模型确保了每个连接只能交付一个响应,所有,在HTTP/1.x中客户端想要发出多个并行请求并且高性能发出,就需要使用多个TCP连接。

而在HTTP/2中新的二进制帧层消除了这些限制——让客户端和服务器将HTTP消费分解为独立的帧,交错它们,并在另一端重新组合来实现完整的请求和响应多路复用。

快照在同一连接中捕获多个正在运行的流。客户端向服务器传输DATA帧(stream5),而服务器正在向客户端传输流 1 和 3 的交错帧序列。因此,有三个并行流在传输中。

没错这就是HTTP/2的一个增强点——将 HTTP 消息分解为独立帧、交错并在另一端重新组装它们的能力。

我们可以拿他来:

  • 并行交错多个请求,不会阻塞任何一个
  • 并行交错多个响应,不会阻塞任何一个
  • 使用单个连接并传递多个请求和响应。
  • 删除不必要的HTTP/1.x的解决办法
  • 通过消除不必要的延迟和提高可用网络容量的利用率来缩短页面加载时间。

这里就是二进制分帧作用的体现之处,二进制分帧解决了 HTTP/1.x 中发现的行头阻塞和多个连接的需求,实现以实现请求和响应的并行处理和传递,让应用程序更快、更简单

多路复用简单小栗子

拿百度图片为例子,我们打开百度图片,打开浏览器控制台。通过Network并刷新页面,就可以看到,h2让图片传输通过了一个域名和一个连接标识(Connection ID )。

而h1呢?我们来看看百度搜索,他的传输就要用到不同的连接标识了(就是使用了多个TCP连接)

流优先级

因实现客户端和服务器交错和交付帧的顺序,HTTP/2 标准允许每个流具有关联的权重和依赖关系:

  • 可以为每个流分配 1 到 256 之间的整数权重。
  • 每个流可以被赋予对另一个流的显式依赖。

流依赖和权重的组合能够让客户端构建和传达一个"优先树",它表达了希望如何接收响应。服务器就可以通过这个"优先树"来控制CPU、内存和其他资源的分配来确定流处理的优先级,只要响应数据能够使用,就会分配带宽用来确保向客户端提供优先级高响应。

流量控制

流量控制是一种机制,可防止发送方用它可能不想要或无法处理的数据压倒接收方。

HTTP/2流在单个TCP连接中单路复用,因此原本的TCP流控制就显得不够精细,没有提供必要的程序级API来规范各个流的传递。因此,HTTP/2为了解决这个问题。提供了一组简单的构建模块,运行客户端和服务器实现自己的流和连接级控制。

服务器推送(Server push )

HTTP/2 的另一个强大的新特性是服务器能够为单个客户端请求发送多个响应。除了对原始请求的响应之外,服务器还可以向客户端推送额外的资源。

它可以推送的资源可以是:

  • 客户端缓存(Cached by the client)
  • 跨不同页面重用(Reused across different pages)
  • 其他资源复用(Multiplexed alongside other resources)
  • 服务器优先(Prioritized by the server)
  • 客户端拒绝(Declined by the client)

PUSH_PROMISE 101

所有服务器推送流都是通过PUSH_PROMISE帧发起的。服务器把描述的资源推送到客户端,并且需要在请求推送资源响应数据之前交付。

客户端则需要知道服务器打算推送哪些资源,以避免为这些资源创建重复请求,这里就用到了这样的策略——PUSH_PROMISE在父响应之前发送所有帧,其中仅包含承诺资源的 HTTP 标头(DATA帧)。

客户端收到一个PUSH_PROMISE帧,它就可以选择拒绝流(RST_STREAM帧)。

使用 HTTP/2,客户端仍然可以完全控制服务器推送的使用方式:

  1. 客户端可以限制并发推流的数量;
  2. 调整初始流控窗口,控制首次打开流时推送多少数据;
  3. 完全禁用服务器推送。

这些首选项通过SETTINGSHTTP/2 连接开始时的帧进行通信,并且可以随时更新。

每个推送的资源都是一个流,与内联资源不同,它允许客户端单独对其进行多路复用、优先排序和处理。

头压缩(Header compression )

每个 HTTP 传输都带有一组标头,这些标头描述了传输的资源及其属性。HTTP/2 使用 HPACK 压缩格式压缩请求和响应标头元数据,该压缩格式使用两种简单但强大的技术:

  1. 它允许通过静态 Huffman 代码对传输的标头字段进行编码,从而减少它们各自的传输大小。
  2. 它要求客户端和服务器都维护和更新先前看到的标头字段的索引列表(换句话说,它建立了一个共享的压缩上下文),然后将其用作参考以有效地编码先前传输的值。

霍夫曼编码允许在传输时压缩单个值,并且先前传输值的索引列表允许我们通过传输可用于有效查找和重建完整标题键和值的索引值来对重复值进行编码。

HPACK 压缩上下文由静态和动态表组成:

  1. 静态表在规范中定义,并提供所有连接可能使用的常见 HTTP 头字段列表(例如,有效的头名称);
  2. 动态表最初是空的,并根据特定连接中的交换值进行更新。

因此,通过对以前未见过的值使用静态 Huffman 编码,并用索引替换已经存在于每一侧的静态或动态表中的值,可以减少每个请求的大小。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:37:39  更:2022-08-19 19:39:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:39:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码