[TOC]
1、HTTP/1.1 发展中遇到的问题
1.1、发生的变化

1.2、高延迟问题


1.3、巨大的头部

1.4、HTTP1.1的优化

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

2、HTTP2特征概述
2.1、提出背景

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


3、在TCP上从HTTP1升级到HTTP2
3.1、HTTP/2 是不是必须基于TLS/SSL 协议?

3.2、h2与h2c

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


4、h2如何建立会话?
4.1、通讯过程


4.2、服务器端选择协议

5、Stream、Message、Frame 间的关系
5.1、定义

5.2、Stream、Message、Frame 间的关系


5.3、传输中无序

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

6、帧格式:Stream流ID的作用
6.1、对比websocket


6.2、作用




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

7.2、帧的类型


7.3、setting设置帧


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

8.2、静态字典



8.3、动态字典
动态表包含以先进先出的顺序维护的 header 字段列表。动态表中的第一个条目和最新条目在最低索引处,而动态表的最旧条目在最高索引处。
动态表最初是空的。当每个 header 块被解压缩时,将添加条目。动态表可以包含重复的条目(即,具有相同名称和相同值的条目)。因此,解码器不得将重复的条目视为错误。
编码器决定如何更新动态表,因此可以控制动态表使用多少内存。为了限制解码器的存储需求,动态表的 size 受到严格限制。
解码器在处理 header 字段表示列表时更新动态表。
9、HPACK 中如何使用Huffman树编码?
9.1、原理

## 9.2、构造过程

10、HPACK 中整型数字的编码
这里编码的是索引位置,即使下文11章节所说的索引表下标
10.1、小于31

10.2、大于31



11、HPACK 中HEADER 的编码格式
11.1、HEADER帧的格式


11.2、动态表

11.3、字面编码

11.4、格式







11.5、动态表控制

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



12.2、帧格式

12.3 可以禁用

13、stream的状态变迁
13.1、stream特性

13.2、message特性

13.3、发送例子


13.4、stream状态的变化

14、RST_STREAM帧及常见错误码
14.1、定义

14.2、常见的错误码



15、不同请求的优先级
15.1、Priority 优先级设置帧

15.2、优先级


16、不同于 TCP 的流量控制
16.1、为什么需要?


16.2、如何进行?

16.3、流量控制帧

16.4、流控制窗口

16.5、并发流

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

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

17.3、TCP的问题

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

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

18.3、协议转换

18.4、WAF 防火墙

18.5、负载均衡算法

18.6、缓存功能
