- 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 toH2.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: 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 tofalse
. This means that h2 will wait for the first request body bytes to be scheduled and batchHEADERS
andDATA
frames when sending requests (#163, #164) - h2: Split
Body.t
intoBody.Writer.t
andBody.Reader.t
(#165) - h2: OCaml 5.00 compatibility -- add
seeded_hash
toscheduler.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)
- 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
toConnection.request
(#146) - h2: client / server: fix a security issue that allowed a malicious peer to make h2 allocate as much as it wanted (#149)
- 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)
- 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)
- 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)
- 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 areport_exn
function, only astate
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
andResponse.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)
- h2-mirage: depend on
mirage-conduit
instead ofconduit-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 onocamlfind
(#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 requiresconduit-mirage
>= 2.0.2 andmirage-flow
>= 2.0.0 (#77)
- h2-mirage: Provide
Server
andClient
functors that take aMirage_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)
- 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)
- Initial public release