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压缩

Download history 1160/week @ 2024-02-26 1121/week @ 2024-03-04 1057/week @ 2024-03-11 1109/week @ 2024-03-18 1331/week @ 2024-03-25 1814/week @ 2024-04-01 862/week @ 2024-04-08 1074/week @ 2024-04-15 991/week @ 2024-04-22 992/week @ 2024-04-29 914/week @ 2024-05-06 792/week @ 2024-05-13 1113/week @ 2024-05-20 1272/week @ 2024-05-27 1236/week @ 2024-06-03 615/week @ 2024-06-10

4,343 每月下载次数
262 个crate(5 个直接)中使用

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 许可证 的条款发布。

依赖项

~215KB