头部压缩 HPACK

为什么要进行头部压缩呢?

HTTP头是比较长的,如果发送的数据比较小时,也得发送一个很大的HTTP头部。当这种请求数很多的时候,会导致网络的吞吐率不高。并且,比较大的HTTP头部会迅速占满慢启动过程中的拥塞窗口,导致延迟加大。

如何进行头部压缩

简单说,HTTP头压缩需要在HTTP/2 Client和服务端之间:

  • 维护一份相同的静态表(Static Table),包含常见的头部名称,以及特别常见的头部名称与值的组合;
  • 维护一份相同的动态表(Dynamic Table),可以动态地添加内容;
  • 基于静态哈夫曼码表的哈夫曼编码(Huffman Coding);

静态表格

首先对常用的HTTP头部字段进行编号,用一个静态表格表示
在这里插入图片描述

如果是静态表格中出现的,就直接用索引。比如2代表Method:post

哈夫曼编码
不在静态表格中或者只有key在静态表格value不在静态表格(Method:option),使用哈夫曼编码/索引+哈夫曼编码

动态表格
服务端收到新的请求头后,会将他们缓存在动态表格中,索引从62开始。

如何判断是完全索引(key+value)还是只有key
高位设置为 1 表示这个字节是一个完全索引值(key 和 value 都在索引中)

Method POST表示为:0x82。不是02了,这里就是把第8位置成了1,变成了二进制的1000 0002,表示name/value完全匹配。

而如果第8位不是1,如0000 0002那么value值就是自定义的,后面紧跟着的一个字节就是表示value的字符长度,然后再跟着相应长度的字符。Method: OPTION:0206OPTION(02=>Method,06后面的值长为6,option要哈夫曼编码)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值