《HTTP/2 In Action 中文版》
简约笔记,用于了解下大致的概念。
HTTP各版本
xmind思维导图
文本化
HTTP/2 In Action
HTTP/0.9
单个GET方法,无请求头
只支持纯文本内容
一对请求-响应=一个TCP连接-关闭
HTTP/1.0
更多的请求方法:HEAD、POST
HTTP首部:请求首部、响应首部
3位数的响应状态码
响应内容不仅仅是超文本,包含其他媒体文件
请求拥有了正文部分
一对请求-响应=一个TCP连接-关闭
HTTP/1.1
强制添加host首部
持久连接(长连接)
-
Connection:Keep-Alive
-
(keep-alive下)同一个域名同一个文件的多个请求,复用一个TCP
- 多对请求-响应=一个TCP连接-关闭
- 同个域名多个文件对应多个TCP连接(最大6个)
-
CS任意端可关闭,C端确认不需要请求时:Connection:Close
新增:PUT、DELETE、OPTIONS、CONNECT、TRACE
缓存方法
-
Cache-Control
- 注意:localstorage和sessionstore是浏览器层的缓存
-
cache种类
- from memory cache
- from-disk-cache
其他
- Cookie:维护HTTP状态
- 权限验证
- 尾随首部:正文之后发送(Header中)
HTTP/3
QUIC协议
-
移除了TCP,自身包含TLS
-
有2个版本
- google的gQUCK
- IETF的iQCK(最终的标准)
-
http只是它的一个用例,该协议是个独立的协议,也是一个与http协议平级的标准
-
Cubic算法
- 拥塞控制
解决了h2中TCP层的队头阻塞,通过冗余数据包,来避免重传
HTTP/2
先驱:SPDY协议
- 流多路服用
- 请求优先级
- HTTP首部压缩
新概念
-
二进制协议
- 原协议基于文本,此协议是二进制的基于数据包的协议
-
多路复用
- 同个域名,多个文件,多个请求,仅有一个TCP连接
-
流量控制
-
流状态
-
C到S
- 空闲、打开、半关闭、关闭
-
S到C(用于启动一个新的流)
- 空闲、保留、半关闭、关闭
-
-
控制流的窗口大小,类似于TCP的窗口控制
-
-
数据流优先级
- 流依赖
- 流权重
-
首部压缩
-
压缩方法(无损压缩)
-
查表法
- 根据表格index,查询对应的内容
-
高效的编码技术
-
ASCII编码
- 同等长度,案顺序编码
-
霍夫曼编码
- 可变长度编码
-
-
lookback(反查)压缩
- 当前位置放入引用,指向重复文本
-
-
其他知识
-
正文压缩(accept-encoding)
- gzip,deflate,br(brotli)
-
-
HPACK
-
HPACK静态表
- 包含61个常见的HTTP首部名称
-
HPACK动态表
- 从位置62开始
-
HPACK首部类型
- 索引首部字段类型
- 带递增索引的字符串首部字段
- 不索引的字符串首部字段
- 从不索引的字符串首部字段
-
霍夫曼编码表
-
-
-
服务端推送