6 个版本 (3 个重大更改)
使用旧的 Rust 2015
0.3.0 | 2015年10月22日 |
---|---|
0.2.0 | 2015年4月11日 |
0.1.0 | 2015年4月4日 |
0.0.3 | 2015年4月2日 |
0.0.2 | 2015年3月28日 |
#675 在 压缩
4,343 每月下载次数
在 262 个crate(5 个直接)中使用
135KB
2.5K SLoC
hpack-rs
Rust 语言中实现的 HPACK 编码器。
概述
该库允许您根据 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 许可证 的条款发布。
依赖项
~215KB