#huffman #hpack #canonical #huffman-coding #http #codec #string-literal

httlib-huffman

用于处理HTTP/2中HPACK格式的规范Huffman算法

14个版本

0.3.4 2020年11月11日
0.3.3 2020年11月10日
0.2.3 2020年11月5日
0.2.0 2020年10月20日
0.1.4 2020年10月16日

#586算法

Download history 45/week @ 2023-12-08 11/week @ 2023-12-15 156/week @ 2023-12-22 346/week @ 2023-12-29 252/week @ 2024-01-05 222/week @ 2024-01-12 244/week @ 2024-01-19 345/week @ 2024-01-26 853/week @ 2024-02-02 374/week @ 2024-02-09 321/week @ 2024-02-16 589/week @ 2024-02-23 616/week @ 2024-03-01 245/week @ 2024-03-08 484/week @ 2024-03-15 531/week @ 2024-03-22

1,931 每月下载次数
12crate(直接使用2个)中使用

MIT 许可证

240KB
7K SLoC

httlib-huffman

该crate实现了用于处理规范Huffman的函数,以处理HPACK格式,并在HTTP/2中公开了一个简单的API,用于根据HPACK规范进行HTTP/2头字符串的编码和解码。

Documentation Source

HTTP/2的头部压缩格式,称为HPACK,预计将Huffman算法用于编码头部字面值。这有助于减少每个Web请求和响应中传输的数据量。

Huffman编码是一种特定的最优前缀码,通常用于无损数据压缩。寻找或使用此类代码的过程是通过David A. Huffman开发的Huffman编码算法进行的。Huffman算法的输出可以视为用于编码源符号(如文件中的字符)的可变长度码表。算法从源符号每个可能值的估计概率或频率(权重)中推导出此表。与其他熵编码方法一样,常见的符号通常使用比不常见的符号更少的位数来表示。Huffman的方法可以高效实现,如果这些权重已排序,则找到代码的时间与输入权重的数量成正比。

HPACK 压缩包含一个预先创建的用于编码 ASCII 字符到 Huffman 序列的 规范 Huffman 码表。一个 规范 Huffman 码是一种具有独特性质的特定类型的 Huffman 码,它可以以一种非常紧凑的方式描述。在上述表中包含了每个 ASCII 字符的 Huffman 码,长度可达 32 位(4x8 字段,值为 0 或 1),以二进制整数形式呈现,对齐到最高有效位(MSB 是最左边的位)。

每个模块都更详细地介绍了这个主题,因此请查看代码的其他部分以了解更多信息。

用法

编码示例

use httlib_huffman::encode;

let mut dst = Vec::new();
let text = "Hello world!".as_bytes();
encode(&text, &mut dst).unwrap();

解码示例

use httlib_huffman::{DecoderSpeed, decode};

let speed = DecoderSpeed::ThreeBits;
let mut dst = Vec::new();
let src = vec![135];
decode(&src, &mut dst, speed).unwrap();

文章

许可:MIT

无运行时依赖