【问题标题】:HTTP/2 header compressionHTTP/2 标头压缩
【发布时间】:2016-09-01 06:05:07
【问题描述】:

我从单个客户端发送 4-5 个连续的 HTTP/2 请求,并且所有请求的 HTTP 标头都相同(以及有效负载)。

原始标头大小约为 343 字节。 客户端 - 火狐, 服务器 - 码头

然后我通过wireshark测量标题大小。我可以观察每个请求的标头大小,如下所示。

1st - 261 bytes
2nd -  55 bytes
3rd -  52 bytes
4th -  52 bytes

我假设标题大小的第一个减少是由于发送索引对应于静态标题以及由于文字编码。在第一个请求之后,动态表被填充并且第二个请求中的所有标头都将是索引值。因此进一步减少了第二个请求。

但我不明白为什么从第二个请求减少到第三个请求。我用很少的原始标头大小对此进行了测试,并且在从第二个请求到第三个请求减少 3 个字节然后大小变得一致的情况下,可以看到相同的行为。

如果有人可以帮助对此进行解释,请不胜感激。

【问题讨论】:

  • 您只能通过查看压缩标头的二进制表示来确定。然而,一个可能的原因是在第二个标题的开头使用了dynamic table update
  • HTTP/2 压缩“headers”还包含 HTTP 方法、URI、权限等。你确定 everything 完全相等吗?
  • 我认为您有有点不同的请求,它们将以另一种方式压缩。我认为您不应该认真分析 52 字节和 55 字节的拖曳请求之间的区别。如果您确实想找到原因,那么您应该发布 full content 的 wireshark 数据。只有分析确切的数据才能找到差异的原因。

标签: header compression http2


【解决方案1】:

分析HEADER帧后发现是动态头表大小更新信号。在这里,在第一个请求之后,编码器决定选择小于最大表大小的容量,并在第二个请求中向解码器发送信号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2015-12-13
    • 2018-10-30
    • 2011-06-24
    相关资源
    最近更新 更多