Module H2_hpack

HPACK Header Compression per RFC 7541.

This module implements header compression for HTTP/2 as specified in RFC 7541.

Overview

HPACK compresses HTTP headers by:

Usage

Create encoder/decoder contexts for each HTTP/2 connection:

  let encoder = Encoder.create 4096 in
  let decoder = Decoder.create 4096 in

  (* Encode headers *)
  let headers = [
    { name = ":method"; value = "GET"; sensitive = false };
    { name = ":path"; value = "/"; sensitive = false };
  ] in
  let buf = Cstruct.create 1024 in
  let len = Encoder.encode_headers encoder buf headers in

  (* Decode headers *)
  let header_block = Cstruct.sub buf 0 len in
  match Decoder.decode decoder header_block with
  | Ok headers -> (* process headers *)
  | Error Decoding_error -> (* handle error *)

Types

type header = {
  1. name : string;
    (*

    Header field name (lowercase, or pseudo-header with colon prefix).

    *)
  2. value : string;
    (*

    Header field value.

    *)
  3. sensitive : bool;
    (*

    If true, this header should never be indexed. Used for sensitive values like cookies and authorization.

    *)
}

A header field with optional sensitivity flag.

type error =
  1. | Decoding_error
    (*

    HPACK decoding error.

    *)
val pp_error : Format.formatter -> error -> unit

Pretty printer for errors.

module Decoder : sig ... end
module Encoder : sig ... end
module Huffman : sig ... end

Constants

val default_table_size : int

Default dynamic table size: 4096 bytes.