zerodds-hpack
HPACK (RFC 7541) Header-Compression-Codec fuer HTTP/2: Variable-
Length-Integer, String-Literals (mit/ohne Huffman, Appendix B),
Static-Table (61 Eintraege, Appendix A), Dynamic-Table mit
SETTINGS_HEADER_TABLE_SIZE-Lifecycle und alle vier Header-Field-
Repraesentationen aus §6. no_std + alloc,
forbid(unsafe_code). Safety classification: STANDARD.
Spec-Mapping
| Spec | Abschnitt |
|---|---|
| RFC 7541 (HPACK) | §2.3 (Indexing-Tables), §4 (Dynamic-Table-Management), §5.1 (Integer), §5.2 (String-Literals), §6.1 (Indexed-Header), §6.2.1 (Literal-with-Indexing), §6.2.2 (Literal-without-Indexing), §6.2.3 (Literal-Never-Indexed), §6.3 (Dynamic-Table-Size-Update), Appendix A (Static-Table), Appendix B (Huffman) |
Was ist drin
Encoder/Decoder— High-Level-Codec mit eigener Dynamic- Table und Indexing-Strategie (Voll-Match → indexed; Name-Only → literal-with-indexing-indexed-name; sonst → literal-with-indexing- new-name).Table/HeaderField— Combined-Lookup ueber Static + Dynamic (Index 1..=61 = Static, 62..N = Dynamic), Eviction per Spec §4.4 (Single-Entry-Too-Large clears die Tabelle).STATIC_TABLE/StaticTableEntry— die 61 Appendix-A-Eintraege als&'static-Konstante.encode_integer/decode_integer— Variable-Length-Integer mit konfigurierbarer Prefix-Bit-Position (§5.1).encode_string/decode_string— String-Literal mit optional Huffman-Compression (§5.2).huffman::encode/huffman::decode— Static-Huffman-Code aus Appendix B mit EOS-Padding-Detection.
Schichten-Position
Layer 5 — Bridges. Substrat fuer:
zerodds-http2— RFC 9113 Framing + Stream-State- Machine.zerodds-grpc-bridge— gRPC-over-HTTP/2 + gRPC-Web Length-Prefixed-Message-Codec.
Quickstart
use ;
let mut encoder = new;
let mut decoder = new;
let headers = vec!;
let wire = encoder.encode;
let decoded = decoder.decode.expect;
assert_eq!;
Huffman-Compression aktivieren:
use Encoder;
let mut encoder = new;
encoder.use_huffman = true;
Dynamic-Table-Size konfigurieren (z.B. wenn HTTP/2-Peer
SETTINGS_HEADER_TABLE_SIZE schickt):
use Decoder;
let mut decoder = with_max_size;
decoder.table_mut.set_max_size;
Feature-Flags
| Feature | Default | Zweck |
|---|---|---|
std |
✅ | std::error::Error fuer alle Fehler-Typen. |
alloc |
✅ (via std) | Vec / String / VecDeque. |
Crate ist no_std-fahig: default-features = false, features = ["alloc"].
Stabilitaet
1.0.0-rc.1 ist die initiale Release-Materialisierung. Public-API,
Wire-Format (RFC 7541) und Fehler-Diskriminanten sind RC1-stabil;
Breaking-Changes erfordern Major-Bump.
Tests
49 Unit-Tests: Integer-Coding (8, davon 3 RFC-7541-Appendix-C-1- Vektoren), String-Coding (7, inkl. Huffman-Roundtrip), Huffman (7), Table-Management (14), Encoder (7), Decoder (8 inkl. RFC-7541-Appendix- C-2.1-Vektor + Dynamic-Table-Size-Update + Invalid-Index-Rejection).
Lizenz
Apache-2.0. Siehe LICENSE.
Siehe auch
docs/release/rc1-reviews/hpack.md— RC1-Review.zerodds-http2— HTTP/2-Framing-Konsument.zerodds-grpc-bridge— gRPC-Konsument.