#hpack #decoding #codec #http2 #huffman-coding #byte-sequences

hpack-patched

实现 HPACK 编码的库。从原始包修复。

1 个不稳定版本

使用旧的 Rust 2015

0.3.0 2023 年 9 月 15 日

1312编码

Download history 14/week @ 2024-04-13 9/week @ 2024-04-20 20/week @ 2024-04-27 7/week @ 2024-05-04 1/week @ 2024-05-11 15/week @ 2024-05-18 7/week @ 2024-05-25 46/week @ 2024-06-01 8/week @ 2024-06-08 4/week @ 2024-06-15 19/week @ 2024-06-22 153/week @ 2024-06-29 5/week @ 2024-07-06 53/week @ 2024-07-13 48/week @ 2024-07-20 69/week @ 2024-07-27

266 每月下载

MIT 许可证

135KB
2.5K SLoC

hpack-rs

Travis Build Status AppVeyor Build Status Coveralls master Crates.io

Rust 中的 HPACK 编码实现。

API 文档

概述

该库允许您根据 HPACK 规范执行头部压缩和解压缩。

解码器模块实现了执行 HPACK 解码的 API。在 Decoder 结构体的生命周期内,将跟踪解码上下文(即同一连接上的后续头部应使用同一实例进行解码)。

解码器实现了完整的规范,并允许解码表示压缩头部列表的任何有效字节序列。

编码器模块实现了执行 HPACK 编码的 API。在 Encoder 结构体的生命周期内,将跟踪编码上下文(即应使用同一实例来编码同一连接上的所有头部)。

到目前为止,编码器尚未实现 Huffman 字面量编码;然而,这足以发送到任何 HPACK 兼容的服务器,因为 Huffman 编码是完全可选的。

示例

编码

编码一些由 静态头部表 完全索引的伪头部。

use hpack::Encoder;

let mut encoder = Encoder::new();
let headers = vec![
    (b":method".to_vec(), b"GET".to_vec()),
    (b":path".to_vec(), b"/".to_vec()),
];
// The headers are encoded by providing their index (with a bit flag
// indicating that the indexed representation is used).
assert_eq!(encoder.encode(&headers), vec![2 | 0x80, 4 | 0x80]);

解码

从原始字节序列中解码头部。在这种情况下,它们都由静态表索引。

use hpack::Decoder;

let mut decoder = Decoder::new();
let header_list = decoder.decode(&[0x82, 0x84]).unwrap();
assert_eq!(header_list, [
    (b":method".to_vec(), b"GET".to_vec()),
    (b":path".to_vec(), b"/".to_vec()),
]);

互操作性

解码器已与已将其结果发布到 http2jp/hpack-test-case 仓库的 HPACK 编码器进行了互操作性测试。

许可证

该项目根据 MIT 许可证 的条款发布。

依赖关系

~220KB