流 (Stream)

HTTP/2规范对流的定义是:HTTP/2连接上独立的,双向的帧序列交换。你可以将流看作连接上的一系列帧。

消息

  • http1.1
GET / HTTP/1.1
Host: www.abc.com
User-agent: Chrome
Accept-Encoding: compress, gzip

HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 2
  • http2
:scheme: https
:method: GET
:path: /
:authority: www.abc.com
User-agent: Chrome
Accept-Encoding: compress, gzip

:status: 200
Content-type: text/plain

流量控制

优先级

服务端推送

首部压缩(HPACK)

为什么不直接使用GZIP做首部压缩

CRIME攻击告诉我们,GZIP也有泄漏加密信息的风险。CRIME的原理是这样的,攻击者在请求中添加数据,观察压缩加密后的数据量是否会小雨预期。如果变小了,攻击者就知道注入的文本和请求中的其他内容(比如私有的session cookie)有重复。在很短的时间内,经过加密的数据内容就可以全部搞清楚。因此大家放弃了已有的压缩方案,研发出HPACK。