Http2的新特性

http2最大的特点, 在于没有改动http的语义,等核心概念下, 致力于突破上一代的性能限制,改进传输性能, 实现低延迟高吞吐。 在于新增了二进制分帧层。

一. 二进制帧

把以往的明文传输, 增强为二进制帧的形式, 首部放在headers帧, body部分放在Data帧, 帧为传输的最小单位。我们所有的请求都可以在一个连接上完成。 因为在通信传输中,大部分HTTP连接处于突发,短时间的, 所有我们共享一个连接, 但是这个连接上承载了多个传输流(stream), 它们是任意双向数据流, 以message的形式发送, 且每个message中可以有多个帧。而帧是可以乱序发送的, 以流标识进行组装。

单连接多资源的好处:

1. 减少了服务器连接压力,连接的吞吐量变大了,内存占用少了。

2. 解决了由TCP连接导致的网络阻塞问题

3. 慢启动时间减少, 拥塞和丢包恢复速度块

注意: 1. 流标识符, 服务端为偶数, 客服端为奇数。 2. stream ID , 实现多路复用的关键, 接收端根据这个ID 并发,组装。 同一个Stream的frame必须是有序的。

二. 头部压缩 HPACK

一般我们的消息主体会通过gzip进行压缩, 但是起始行和消息头部没有压缩的。随着请求的增多, 我们传输头部的开销是非常大的。

如何进行头部压缩?

维护一张相同的静态表: 即共61页,每次利用索引号传输

维护一张相同的动态表:当header name 在静态表中没有使用Huffman coding , 缓存到动态列表,即往后发送索引传输。

三. 多路复用

指一个连接可以由很多的流进行复用, 即同一个流之间的frame必须有序, 没有ID编号。

单个 HTTP/2 连接可以包含多个并发打开的 stream 流,任一一个端点都可
能交叉收到来自多个 stream 流的帧。
stream 流可以单方面建立和使用,也可以由客户端或服务器共享。
任何一个端都可以关闭 stream 流。
stream 流上发送帧的顺序非常重要。收件人按照收到的顺序处理帧。特
别是, HEADERS DATA 帧的顺序在语义上是重要的。
stream 流由整数标识。 stream 流标识符是由发起流的端点分配给 stream
流的。
四. 服务器推送
1. 推送遵循同源策略
2. 是服务端基于客户端的请求响应确定
当服务端主动发起推送便会先发送一个:Frame type PUSH_PROMISE , 带了新建ID,告诉客户端我即将推送资源, 以这个ID。
下个章节:https  

你可能感兴趣的:(http)