【问题标题】:HTTP/2 data compressionHTTP/2 数据压缩
【发布时间】:2016-12-24 08:37:41
【问题描述】:

我试图了解 HTTP/2 协议压缩数据字段的方式。我在 rfc 中没有找到算法。我知道它是一个二进制协议。 我正在寻找一种将二进制协议恢复为人类可读内容的方法。我认为它就像写在标题中的 gzip,但没有人有我可以查找二进制协议引用的来源?

Frame 55: 151 bytes on wire (1208 bits), 151 bytes captured (1208 bits) on interface 0
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst:00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1
Transmission Control Protocol, Src Port: 443 (443), Dst Port: 55300 (55300), Seq: 1087, Ack: 1078, Len: 85
Secure Sockets Layer
HyperText Transfer Protocol 2
Stream: HEADERS, Stream ID: 13, Length 47
    Length: 47
    Type: HEADERS (1)
    Flags: 0x04
    0... .... .... .... .... .... .... .... = Reserved: 0x00000000
    .000 0000 0000 0000 0000 0000 0000 1101 = Stream Identifier: 13
    [Pad Length: 0]
    Header Block Fragment: 8854012a5a839bd9ab5f87497ca589d34d1f5c0333333861...
    [Header Length: 177]
    [Header Count: 6]
    Header: :status: 200
    Header: access-control-allow-origin: *
    Header: content-encoding: gzip
    Header: content-type: text/html
    Header: content-length: 338
    Header: date: Wed, 17 Aug 2016 15:14:25 GMT
    Padding: <MISSING>

    Frame 56: 442 bytes on wire (3536 bits), 442 bytes captured (3536 bits) on interface 0
  Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
  Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1
  Transmission Control Protocol, Src Port: 443 (443), Dst Port: 55300 (55300), Seq: 1172, Ack: 1078, Len: 376
  Secure Sockets Layer
  HyperText Transfer Protocol 2
      Stream: DATA, Stream ID: 13, Length 338
          Length: 338
          Type: DATA (0)
          Flags: 0x01
          0... .... .... .... .... .... .... .... = Reserved: 0x00000000
          .000 0000 0000 0000 0000 0000 0000 1101 = Stream Identifier: 13
          [Pad Length: 0]
          Data: 1f8b080000096e8800ff9cd2416b1b311005e0b3ffc5eb9e...
          Padding: <MISSING>

【问题讨论】:

  • HTTP/2 不会添加数据负载的新压缩,而是添加标头。您显然在 RFC 中看起来不够努力(.. 或者只是搜索“压缩”):tools.ietf.org/html/rfc7540#ref-COMPRESSION 链接到 HPACK 文档。
  • 我知道标头压缩是如何工作的,我对这一行很感兴趣 Data: 1f8b080000096e8800ff9cd2416b1b311005e0b3ffc5eb9e... 这不在标头中,因此此处未使用 hpack 也不是 gzip 它是一些一种二进制格式,我想知道它是如何工作的
  • 1f8b08是gzip压缩的起始字节,所以是gzip。此外,响应标头为 content-encoding: gzip,因此 DATA 帧包含压缩后的响应正文。

标签: http2


【解决方案1】:

HTTP/2 响应的响应正文被压缩(或不压缩)与使用 HTTP/1 的方式完全相同:请求中的 Accept-Encoding: 和响应中的 Content-Encoding:。 HTTP/2 对正文的压缩没有任何新的作用,只有在 HTTP/1 中根本没有压缩的标头。

【讨论】:

猜你喜欢
  • 2016-09-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多