HTTP2.0
相比HTTP1.1,我们用过的用于加强HTTP1.1的招数,在HTTP2.0中,可以悉数抛弃了吧。HTTP2.0把解决以前遗留的问题都内置在了传输层中。
- HTTP2.0目的:通过支持请求与响应的多路复用来减少时延,通过压缩HTTP首部字段将协议开销降至最低,同时增加对请求优先级和服务器端推送的支持。
- 其他协议层面的辅助实现:新的流量控制、错误处理和更新机制
- HTTP2.0修改了格式化数据(分帧),的方式。
- 增加了新的二进制分帧数据层。
二进制分帧层位于套接字和应用可见的高层HTTP API之间的一个新机制:HTTP的语义,包括各种动词,首部,方法等不变,不同的是改变是数据的编码方式(使用二进制编码)。
新概念
- 流:已建立的连接上的字节流
- 消息:与逻辑消息对应的完整的一系列数据帧
- 帧:HTTP2.0通信的最小单位,每个帧包含帧首部,至少也会标示出当前帧所属的流。
所有的HTTP2.0通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。相应地,每个数据流以消息的形式发送,而消息由一个或多个帧组成,这些帧可以乱序发送,然后再根据每个帧的流标示符重新组装。
要深刻理解“流”,“消息”和“帧”几个概念
- 所有的通信都在一个TCP连接上完成。
- 流是连接中的一个虚拟通道,可以承载双向的消息;每个流都有一个唯一的整数标示符(实现一个TCP连接,任意流的基础,为消息找到流的归属)。
- 消息是逻辑上的HTTP消息,比如请求、响应等,由一个或多个帧组成。
- 帧是最小的通信单位,承载着特定类型的数据,如HTTP首部、负荷,等等。
多向请求和响应
在HTTP1.1中,想发送多个并行的请求,需要开启多个TCP连接,而HTTP2.0新的二进制分帧层突破了这些限制,实现了多向请求和响应:客户端和服务端可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端重新组装起来。(也就是请求和响应可以在共享的TCP连接上同时发送)
请求的优先级
每个来源一个请求
好处:
- 连接路径上的套接字管理工作少了,内存占用少了,连接吞吐量大了。
- 由于TCP连接减少,使得网络拥塞状况得以改观。
- 慢启动时间减少,丢包和拥塞恢复速度更快。
不足:
- TCP层次上仍然存在队首阻塞
- 。。。
流量控制
服务器推送
HTTP2.0新增的一个强大的新功能:服务器可以对一个客户端请求发送多个响应。也就是说,除了对最初请求的响应,服务器还可以额外向客户端推送资源,而无需客户端明确请求。
- 推送遵循同源策略
首部压缩
- 只编码发送有差异的首部信息,避免传输冗余的首部,减少请求的开销。
(未完)