hpack实现原理

本文详细介绍了HTTP/2中用于头部压缩的hpack算法,包括静态表和动态表的概念,数据成分的构成,以及不同操作码对应的编码和解码过程。通过对示例的解析,阐述了索引计算规则以及如何根据操作码处理头部字段。
摘要由CSDN通过智能技术生成

引言

在http 1.x的版本中,头部字段以字符串进行传输,在高并发的场景下,每个请求都携带了header字段,浪费了带宽,增加了网络延迟。

针对这个问题,http 2.x的版本对hearder信息进行压缩编码,从而提高带宽利用率,这种压缩编码算法就是hpack。

概要

hpack编码和解码的过程需要依赖两张表格——静态表和动态表。

静态表是写死的,其索引值共有61对,表的内容如下:

      +-------+-----------------------------+---------------+
      | Index | Header Name                 | Header Value  |
      +-------+-----------------------------+---------------+
      | 1     | :authority                  |               |
      | 2     | :method                     | GET           |
      | 3     | :method                     | POST          |
      | 4     | :path                       | /             |
      | 5     | :path                       | /index.html   |
      | 6     | :scheme                     | http          |
      | 7     | :scheme                     | https         |
      | 8     | :status                     | 200           |
      | 9     | :status                     | 204           |
      | 10    | :status                     | 206           |
      | 11    | :status                     | 304           |
      | 12    | :status                     | 400           |
      | 13    | :status                     | 404           |
      | 14    | :status                     | 500           |
      | 15    | accept-charset              |               |
      | 16    | accept-encoding             | gzip, deflate |
      | 17    | accept-language             |               |
      | 18    | accept-ranges               |               |
      | 19    | accept                      |               |
      | 20    | access-control-allow-origin |               |
      | 21    | age                         |               |
      | 22    | allow                       |               |
      | 23    | authorization               |               |
      | 24    | cache-control               |               |
      | 25    | content-disposition         |               |
      | 26    | content-encoding            |               |
      | 27    | content-language            |               |
      | 28    | content-length              |               |
      | 29    | content-location            |               |
      | 30    | content-range               |               |
      | 31    | content-type                |               |
      | 32    | cookie                      |               |
      | 33    | date                        |               |
      | 34    | etag                        |               |
      | 35    | expect                      |               |
      | 36    | expires                     |               |
      | 37    | from                        |               |
      | 38    | host                        |               |
      | 39    | if-match                    |               |
      | 40    | if-modified-since           |               |
      | 41    | if-none-match               |               |
      | 42    | if-range                    |               |
      | 43    | if-unmodified-since         |               |
      | 44    | last-modified               |               |
      | 45    | link                        |               |
      | 46    | location                    |               |
      | 47    | max-forwards                |               |
      | 48    | proxy-authenticate          |               |
      | 49    | proxy-authorization         |               |
      | 50    | range                       |               |
      | 51    | referer                     |               |
      | 52    | refresh                     |               |
      | 53    | retry-after                 |               |
      | 54    | server                      |               |
      | 55    | set-cookie                  |               |
      | 56    | strict-transport-security   |               |
      | 57    | transfer-encoding           |               |
      | 58    | user-agent                  |               |
      | 59    | vary                        |               |
      | 60    | via                         |               |
      | 61    | www-authenticate            |               |
      +-------+-----------------------------+---------------+

动态表的值却是在每次请求中,由发送端进行扩充的。

静态表和动态表共同构成了索引值,索引值最小为1,如下图所示&#

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值