APN需要使用HPACK(HTTP / 2的头压缩) 防止重复的标题键和值。 APN维持小规模 HPACK的动态表。帮助避免填写APNs HPACK表 并且需要丢弃表数据,编码表中的标题 以下方式 - 特别是在发送大量流时:
如果我理解正确,我需要使用Huffman Encoding进行标头压缩。如果我错了,请纠正我。
:path值应编码为文字头字段而不用 索引
授权请求标头(如果存在)应编码为a 没有索引的文字标题字段
我为此阅读了RFC 7541,但不知道他们在谈论什么。请注意,我正在尝试通过这篇文章了解系统和要求以获取知识,而不仅仅是对特定问题的回答。
用于apns-id,apns-expiration的适当编码, 和apns-collapse-id请求标头根据是否不同而不同 是初始或后续POST操作的一部分,如下所示:
第一次发送这些标头时,请使用增量编码 索引以允许将标题名称添加到动态表
随后您发送这些标头,将它们编码为文字标题 没有索引的字段
当他们说,"使用增量索引对它们进行编码以允许将标题名称添加到动态表格时,它们意味着什么?和"随后您发送这些标题,将它们编码为文字标题字段而不编制索引"然后。我想用两个带有/ out索引的文字头字段中的一个理解将有助于我更好地理解它。
再次感谢您阅读此问题,请帮助我!!
答案 0 :(得分:0)
我认为你最好使用一个为你做HTTP / 2的Java库。
The Jetty HttpClient
(免责声明,我是维护者)就是这样做的,请参阅here。
如果你想要实现HPACK,因为你想获得乐趣,那么你必须花时间仔细阅读RFC 7541。 作为实现它的起点,您可以阅读HPACK的许多Java实现,从Jetty's到Netty,Undertow's等。
您要问的所有问题(例如“什么是没有索引的文字标题字段”)都在RFC的各自部分详细说明。
非常简单,HPACK定义了一个将数字映射到字符串的映射表。 两个对等体都保持该表同步,因此这两个表总是包含相同的数据(静止)。
当一个对等体发送HPACK块时,它会发送数字,以便接收对等体可以使用这些数字来访问HPACK表以获取字符串。
对于新/自定义标头(想想cookie),发送对等体发送数字和字符串,以便接收对等体可以更新其HPACK表。第一次没有压缩,但第二次发送相同的头,发送对等体只发送数字,因为它知道另一个对等体已经映射了字符串,这给出了HTTP头的良好压缩