Http2 hpack 头表大小

Posted

技术标签:

【中文标题】Http2 hpack 头表大小【英文标题】:Http2 hpack header table size 【发布时间】:2021-12-19 12:19:15 【问题描述】:

http2 动态 HPACK 头表的推荐大小是多少?这通常应该设置为高于您的标题大小吗?对此有何建议?

【问题讨论】:

【参考方案1】:

作为discussed elsewhere:

我不确定您的意思是“通常是否应该将其设置为高于您的标题大小”。 SETTINGS_HEADER_TABLE_SIZE 设置所有标题的最大表大小。所以并不真正依赖任何一个标题。

此外,一些标题将能够使用静态表(例如:status: 200),因此永远不需要在动态表中。

每个请求的其他标头可能会发生变化(例如内容长度),因此不太可能存储在动态表中。

更大的表大小意味着更高的 HPACK 效率,但客户端和服务器需要更多的内存。所以这是一个平衡。所以对于“我的 HPACK 表应该有多大”没有明确的答案。这取决于您的标头的可变性、流量和内存量。

老实说,默认值通常是有原因的默认值,因此除非您有充分的理由更改它们,或者深刻理解它们的含义,否则会坚持使用这些值。

有人说 HPACK 无论如何都是一种微优化。 “太小”的 HPACK 标头的最坏影响是每隔几个请求,可能需要发送一些完整的标头。没那么糟糕。上次我听说 nginx 甚至没有为客户端请求实现动态表,它仍然可以正常工作。

但是,如果它太大,您的 Web 服务器内存会增加,并且服务许多并发连接的能力会受到影响。在您看到流量激增之前,这可能并不明显。

因此,如果有任何事情,请避免从默认值中增加它。

【讨论】:

以上是关于Http2 hpack 头表大小的主要内容,如果未能解决你的问题,请参考以下文章

HIVE查询性能-数据块大小

头条http2 中的首部压缩的实现原理是什么

http2.0

HTTP2详解

http2.0 有什么优势

码头 HTTP2Client jar 丢失