3、HTTP2协议.md 8.7 KB

[TOC]

1、HTTP/1.1 发展中遇到的问题

1.1、发生的变化

image-20220813224604630

1.2、高延迟问题

image-20220813224625917

image-20220813224836311

1.3、巨大的头部

image-20220813225004647

1.4、HTTP1.1的优化

image-20220813225037932

1.5、HTTP/1.1 不支持服务器推送消息

image-20220813225126902

2、HTTP2特征概述

2.1、提出背景

image-20220813225242683

  • http2协议可以在http协议下,也可以在TLS-SSL协议下使用。
  • 浏览器强制要求HTTP2只能被HTTPS解析,也就是使用TLS-SSL协议。

2.2、特性

image-20220813225444351

image-20220813225530773

3、在TCP上从HTTP1升级到HTTP2

3.1、HTTP/2 是不是必须基于TLS/SSL 协议?

image-20220816210600245

3.2、h2与h2c

image-20220816210746090

3.3、H2C:不使用 TLS 协议进行协议升级

image-20220816213310417

image-20220816213409707

4、h2如何建立会话?

4.1、通讯过程

image-20220816213628014

image-20220816213640440

4.2、服务器端选择协议

image-20220816213815311

5、Stream、Message、Frame 间的关系

5.1、定义

image-20220816214002799

5.2、Stream、Message、Frame 间的关系

image-20220816214249616

image-20220816214702279

5.3、传输中无序

image-20220816214729430

  • 同一个stream必须是有序的
  • 跨越stream可以是无序的

image-20220816214902643

6、帧格式:Stream流ID的作用

6.1、对比websocket

image-20220816215016793

image-20220816215110251

6.2、作用

image-20220816215232321

image-20220816215240030

image-20220816215249933

image-20220816215256014

7、帧格式:帧类型及设置帧的子类型

7.1、定义

image-20220816215731117

  • 帧长度
  • 帧类型
  • 帧标记
  • 帧的id
  • 帧数据

7.2、帧的类型

image-20220816215758282

image-20220816215805092

7.3、setting设置帧

  • 可以设置多个key-value

image-20220816215958065

image-20220816220048816

8、HPACK 如何减少HTTP 头部的大小?

8.1、定义

image-20220816220720751

8.2、静态字典

image-20220816220747802

image-20220816220927312

image-20220816220843281

8.3、动态字典

动态表包含以先进先出的顺序维护的 header 字段列表。动态表中的第一个条目和最新条目在最低索引处,而动态表的最旧条目在最高索引处。

动态表最初是空的。当每个 header 块被解压缩时,将添加条目。动态表可以包含重复的条目(即,具有相同名称和相同值的条目)。因此,解码器不得将重复的条目视为错误。

编码器决定如何更新动态表,因此可以控制动态表使用多少内存。为了限制解码器的存储需求,动态表的 size 受到严格限制。

解码器在处理 header 字段表示列表时更新动态表。

9、HPACK 中如何使用Huffman树编码?

9.1、原理

image-20220816221321050

## 9.2、构造过程

image-20220816221558274

10、HPACK 中整型数字的编码

这里编码的是索引位置,即使下文11章节所说的索引表下标

10.1、小于31

image-20220816230238907

10.2、大于31

image-20220816230356798

image-20220816230421388

image-20220816230523265

11、HPACK 中HEADER 的编码格式

11.1、HEADER帧的格式

image-20220816230631593

image-20220816230701522

11.2、动态表

image-20220816230731894

11.3、字面编码

image-20220816230813032

11.4、格式

image-20220816230857683

image-20220816231045912

image-20220816231317892

image-20220816231327159

image-20220816231628647

image-20220816231647378

image-20220816231657774

11.5、动态表控制

image-20220816231728498

12、服务器端的主动消息推送

12.1、价值

image-20220816232717019

image-20220816232729367

image-20220816232913454

12.2、帧格式

image-20220816233032609

12.3 可以禁用

image-20220816233326240

13、stream的状态变迁

13.1、stream特性

image-20220816233654866

13.2、message特性

image-20220816233732465

13.3、发送例子

image-20220816233807759

image-20220816233818110

13.4、stream状态的变化

image-20220816233905535

14、RST_STREAM帧及常见错误码

14.1、定义

image-20220816234215070

14.2、常见的错误码

image-20220816234234494

image-20220816234241382

image-20220816234247670

15、不同请求的优先级

15.1、Priority 优先级设置帧

image-20220816234332719

15.2、优先级

image-20220816234537477

image-20220816234913183

  • exclusive:是否独占

16、不同于 TCP 的流量控制

16.1、为什么需要?

image-20220817205611078

image-20220817210023672

16.2、如何进行?

image-20220817210119059

16.3、流量控制帧

image-20220817210326885

16.4、流控制窗口

image-20220817210516483

16.5、并发流

image-20220817210535722

17、HTTP/2 的问题

17.1、TCP 以及 TCP+TLS 建链握手过多的问题

image-20220817210751019

17.2、多路复用与 TCP 的队头阻塞问题

image-20220817210827738

17.3、TCP的问题

image-20220817210845887

18、七层负载均衡做了些什么?

18.1、四层负载均衡

image-20220817211116912

18.2、七层负载均衡协议转换举例

image-20220817211157133

18.3、协议转换

image-20220817211448937

18.4、WAF 防火墙

image-20220817211544225

18.5、负载均衡算法

image-20220817211644003

18.6、缓存功能

image-20220817211702271