hpack

An HPACK coder implementation in Rust

Latest version: 0.3.0 registry icon
Maintenance score
0
Safety score
0
Popularity score
71
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.3.0 0 0 2 0 0
0.2.0 0 0 2 0 0
0.1.0 0 0 2 0 0
0.0.3 0 0 2 0 0
0.0.2 0 0 2 0 0
0.0.1 0 0 2 0 0

Stability
Latest release:

0.3.0 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant



hpack-rs

Travis Build Status AppVeyor Build Status Coveralls master Crates.io

An HPACK coder implementation in Rust.

API Documentation

Overview

The library lets you perform header compression and decompression according to the HPACK spec.

The decoder module implements the API for performing HPACK decoding. The Decoder struct will track the decoding context during its lifetime (i.e. subsequent headers on the same connection should be decoded using the same instance).

The decoder implements the full spec and allows for decoding any valid sequence of bytes representing a compressed header list.

The encoder module implements the API for performing HPACK encoding. The Encoder struct will track the encoding context during its lifetime (i.e. the same instance should be used to encode all headers on the same connection).

The encoder so far does not implement Huffman string literal encoding; this, however, is enough to be able to send requests to any HPACK-compliant server, as Huffman encoding is completely optional.

Examples

Encoding

Encode some pseudo-headers that are fully indexed by the static header table.

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]);

Decoding

Decode the headers from a raw byte sequence. In this case both of them are indexed by the static table.

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()),
]);

Interoperability

The decoder is tested for interoperability with HPACK encoders that have published their results to the http2jp/hpack-test-case repo.

License

The project is published under the terms of the MIT License.