package hpack

  1. Overview
  2. Docs
An HPACK (Header Compression for HTTP/2) implementation in OCaml

Install

Dune Dependency

Authors

Maintainers

Sources

h2-0.13.0.tbz
sha256=0d89b6f178175294e7a207223be81d5b83fc31b97549bec34f0432a3b2a8070f
sha512=a442cb80f40fd179211e9ab7b4b748a4d2f7ad6ece75301d74a5363c08cd05a70b94ae90ff6fc6b95e8284c57c14cc17cbe7ade5dbf19b21b56207c6f984faf4

CHANGES.md.html

0.13.0 2024-09-04

  • h2: surface (body) write failures through flush (#247)

    • Body.Writer.flush now takes a callback of the type ([ `Written | ` Closed] -> unit), informing the caller whether the previous writes have been written or whether the output channel was closed.

0.12.0 2024-06-23

  • hpack: fix huffman encoding for codes > 24bit (#229)

  • h2-eio: don't require Eio_unix.stream_socket_ty, allowing the use of mock sockets (#236)

  • h2: drop the dependency on httpaf, use httpun-types instead (#243)

  • hpack: use String.unsafe_get when the string length is known (#244)

0.11.0 2023-10-26

  • h2-eio: adapt to Eio v0.12 (#225)

  • h2-eio: track sw for gluten (#215)

  • h2: Add hpack {= version} constraint (#214)

  • h2, hpack, h2-async: Add opam constraints for angstrom and gluten-async (#212)

  • h2: read available Body.Reader.t immediately upon calling Body.Reader.schedule_read (#238)

0.10.0 2023-03-17

  • hpack: fix a case where hpack would raise an array out of bounds exception (#183) (@jonathanjameswatson)

  • h2: (client) handle multiple RST_STREAM frames (#184) (@jonathanjameswatson)

  • h2: (client) Fix a race condition with ~flush_headers_immediately:false and empty request bodies (#186)

  • h2: Make H2.Reqd.error_code part of the public interface (#188)

  • h2: Add ~request_method argument to H2.Method.body_length (#190) (@jonathanjameswatson)

  • h2: Don't send any frames on a stream after an RST_STREAM frame (#187, #194)

  • h2: call error handler on the client if the remote peer closes the commmunication channel (#177, #196)

  • h2: when reprioritizing a stream, respect its new priority (accounts for inferred default priority when a dependent stream is not in the tree (RFC7540§5.3.1)) (#200)

  • h2: don't remove parent streams from the scheduler if they have children (#201)

  • h2: don't schedule streams as dependencies of others marked for removal (#205)

  • h2: revise scheduling algorithm to avoid starvation (#199, #204, reported in #162, thanks @quernd)

  • h2-eio: adapt to the next gluten-eio version (#210)

0.9.0 2022-08-14

  • h2: Fix tests on 32-bit platforms (#152)

  • h2-mirage: adapt to Conduit v4 and remove H2_mirage.Server_with_conduit (#154)

  • h2: fix memory leaks related to trailer headers in the server and client implementations (#159 (thanks @quernd!), #160)

  • h2: allow configuring flush_headers_immediately on the client and default to false. This means that h2 will wait for the first request body bytes to be scheduled and batch HEADERS and DATA frames when sending requests (#163, #164)

  • h2: Split Body.t into Body.Writer.t and Body.Reader.t (#165)

  • h2: OCaml 5.00 compatibility -- add seeded_hash to scheduler.ml (#168)

  • h2: Use a tail-recursive version of Angstrom.skip_many. Fixes a memory leak in long-running connections e.g. gRPC (#172)

  • h2-async: Add an OCaml-TLS client to h2-async (#174)

  • h2: Fix a bug that caused different requests to share the same headers buffer under concurrency (#182)

0.8.0 2021-04-11

  • h2: scheduler: fix bug that caused zero length DATA frames not to be sent if there were no flow-control credits (#142) -- reported by @blandinw

  • h2,h2-lwt,h2-lwt-unix,h2-async,h2-mirage Add trailers_handler to Connection.request (#146)

  • h2: client / server: fix a security issue that allowed a malicious peer to make h2 allocate as much as it wanted (#149)

0.7.0 2020-08-09

  • h2: client / server: execute request/response body reads as data frames arrive (#130)

  • h2: client / server: only give back flow control tokens after surfacing reads to the application (#131)

  • h2: Set a default of 128MiB for the initial receiving window size (#132)

  • h2: don't attempt to write frames to an encoder that has closed (#134)

  • h2: Handle frame size errors in a more robust manner when parsing (#133)

  • h2: Create push streams with the right priority (as per RFC7540§5.3.5, pushed streams initially depend on their associated stream) (#136)

0.6.1 2020-05-16

  • h2-async: add Async adapter (#94)

  • h2-async: Use gluten to implement h2-async (#125)

  • h2-mirage: Use gluten to implement h2-mirage (#120)

  • h2: Don't put parser in error state when force-closing (#127)

0.6.0 2020-04-29

  • h2-lwt: Close the communication channel after shutting down the client (#108)

  • h2-lwt-unix: fix premature SSL termination in the SSL / TLS runtimes (#109)

  • h2-lwt-unix: TLS runtime: adapt to TLS v0.11.0 (#109)

  • h2-lwt-unix: feed EOF to the state machine if the socket has been closed -- this is especially important on the client because it allows connections to terminate cleanly. (#112)

  • h2: Refactor the Settings module API (#113)

  • h2-lwt, h2-lwt-unix: Use gluten to implement the Lwt-based runtimes (#114)

  • h2: set a lower bound on Angstrom 0.14.0 (#118)

  • h2: in the client implementation, don't report an error if the server has sent an RST_STREAM frame after sending a complete response (#119).

  • h2-lwt-unix: fix a regression that prevented the SSL / TLS runtimes to negotiate an HTTP/2 connection over the ALPN extension of TLS, in their default implementations (#122)

0.5.0 2019-12-19

  • h2, h2-lwt, h2-lwt-unix, h2-mirage: Remove support for versions of OCaml lower than 4.06 (#74)

  • h2: Expose more information in client error handlers when initiating a connection (#80)

  • h2: Make H2.Status.t a strict superset of Httpaf.Status.t (#83)

  • h2-lwt, h2-lwt-unix: split HTTPS functions in 2: one that sets up a default secure connection and performs the TLS handshake / accept, and one that is more "raw", i.e. leaves that responsibility to the caller. Also exposes the socket type to make it easier to abstract over HTTP / HTTPS (#84)

  • h2-lwt, h2-lwt-unix, h2-mirage: Improve the H2_lwt.IO interface, don't require a report_exn function, only a state function that returns the socket state (#85)

  • h2, h2-lwt, h2-lwt-unix, h2-mirage: Add support for starting HTTP/2 for "http" URIs. Covers section 3.2 of the HTTP/2 specification (#87)

  • h2: Fix misinterpretation of the spec where h2 would consider a request / response malformed if it had a non-zero content-length header and no DATA frames (#89)

  • h2: Add Request.body_length and Response.body_length (#90)

  • h2: Fix a bug that caused DATA frames to be incorrectly chunked when returning a streaming response (#91)

  • h2: Drain pending bytes after getting a Close report from the runtime (#92)

  • h2: Report connection errors for unknown frames that exceed the maximum payload size -- they may not be speaking HTTP/2 (#93)

0.4.0 2019-11-05

  • h2-mirage: depend on mirage-conduit instead of conduit-mirage, effectively placing a lower bound of OCaml 4.07 on the next release of h2-mirage (#67)

  • h2-lwt-unix: replace the dune file (previously written in OCaml) with a (select) form to avoid depending on ocamlfind (#68)

  • h2-lwt, h2-lwt-unix, h2-mirage: Refactor interface code through common H2_lwt_intf and expose less (internal) types (#65)

  • h2-lwt, h2-lwt-unix, h2-mirage: Expose Client.is_closed (#65)

  • h2: Don't count peer max concurrent streams based on what the endpoint receives; the endpoint is responsible for selecting it (#71)

  • h2: Fix bug in Headers.remove that prevented removing the last header pair (#73)

  • h2: Fix bug in Headers.replace that prevented replacing the last header pair (#76)

  • h2-mirage: Adapt to Mirage 3.7 interfaces. h2_mirage now requires conduit-mirage >= 2.0.2 and mirage-flow >= 2.0.0 (#77)

0.3.0 2019-05-04

  • h2-mirage: Provide Server and Client functors that take a Mirage_flow_lwt.S module as an argument (#37)

  • h2: Fix bug in the client implementation that didn't report connection preface errors as soon as they happened (#38)

  • h2: optimize the stream scheduler: previously when the writer yielded between writes, a wake up function was registered with all the (active) streams, which required a linear traversal of all the streams. The optimization is to allow every stream to wake up a global writer to which they hold a reference (#40)

  • h2: improve handling of received frames against closed streams (#40)

  • h2: in the client implementation, call the stream level error handler when receiving an RST_STREAM frame (#42)

  • h2-lwt-unix: fail earlier when setting up a SSL/TLS server without the depopts being available (#46)

  • h2-lwt-unix: improve the default ALPN negotiation mechanism in the SSL binding (#46)

0.2.0 2019-04-06

  • h2: Fix false negative related to receiving trailer headers with CONTINUATION frames (#11)

  • hpack: Fix bug where trying to add an entry to an HPACK dynamic table with 0 capacity resulted in an out-of-bounds array access (#13, #35)

  • h2: Add support for the 421 (Misdirected Request) status code as per RFC7540§9.1.2 (#15)

  • h2, h2-lwt, h2-lwt-unix, h2-mirage: Add an HTTP/2 client implementation (#16)

  • h2: Remove dependency on the result package (#18)

  • h2: Track SETTINGS frames that haven't been acknowledged by the peer (#22)

  • h2: Don't treat CONNECT requests as malformed (#32, #34)

  • h2: Respect the initial MAX_FRAME_SIZE setting when allocating the underlying buffer for the frame writer (#34)

0.1.0 2019-03-27

  • Initial public release

OCaml

Innovation. Community. Security.