http头部_HTTP/2协议之头部压缩

前言

为了报文传输更小、更快,在HTTP/2中Header头是经过压缩的,使用的压缩算法为HPACK。本文先通过Wireshark抓包截图直观感受下头部压缩效果,进而分析下这种压缩算法是如何工作的。

一、压缩效果对比

1、压缩前效果

以Header中的user-agent为例,在压缩前的大小为63个字节。

0fcfd1c438c0241c67f922ec9f2c77a4.png

压缩前图示

2、压缩后效果

Header中的user-agent在压缩后,大小为1个字节。

7ecf361b7a9c0d9ed45f9a9a0ac577ef.png

压缩后图示

小结:Header中user-agent从压缩前的63个字节到压缩后的1个字节,HTTP/2是如何做到的呢?

二、HPACK算法

HTTP/2头部通过HPACK算法进行压缩,这种算法通过服务端和客户端个字维护索引表来实现。索引表又分为静态表和动态表。

1、伪头字段

Header传输以二进制桢的方式进行,为了与HTTP1中Header区分,这些以冒号开头的字段被称为“伪头字段”。

5d6a9139a4bc5c4c75d4f839869e9a08.png

伪头字段图示

2、静态表

静态表中定义了61个Header字段与Index,可以通过传输Index进而获取Header的字段与值,极大减少了报文大小。静态表中的字段和值固定,而且是只读的。

9092fd3072cc3886ef17fe6dcc7981b8.png

静态表图示

详见:https://tools.ietf.org/html/rfc7541#appendix-A

3、动态表

动态表接在静态表之后,结构与静态表相同,可随时更新。下图中索引号62、63即为动态表字段。

aa2b627782d4e096c49a28b49dcab27b.png

动态表图示

三、总结

回到本文前的压缩效果对比,客户端通过传输索引号,服务端根据索引号在动态表中获取Header的key与value。user-agent索引号占1个字节。另外,索引表中不存在的使用huffman编码,再更新到动态表中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值