Hackney 4.2.0 - IPv6 and 0-RTT for HTTP/3, cross-sign cert recovery

hackney 4.2.0 is out. It is a drop-in upgrade from 4.1; the changes are
additive so there are no API changes.

{hackney, "4.2.0"}      %% rebar
{:hackney, "~> 4.2"}    # mix

Added

  • IPv6 for HTTP/3. The family connect option (inet | inet6) is forwarded to
    the QUIC layer, which resolves DNS and races addresses with Happy Eyeballs
    (RFC 8305). IPv6 literals such as https://[::1]/ work too.
  • 0-RTT and session resumption for HTTP/3. The server session ticket is cached
    per host and replayed on the next connection; a bodyless request can then be
    sent as 0-RTT, otherwise the ticket gives a resumed handshake. On by default,
    controlled by the zero_rtt option.

Fixed

  • TLS now recovers from an expired cross-signed root instead of failing the
    handshake (for example Let’s Encrypt’s ISRG Root X2 cross-signed by the
    expired ISRG Root X1), across HTTP/1.1, HTTP/2, HTTP/3 and WebTransport. A
    genuinely expired leaf or intermediate still fails.
  • A pooled connection that stopped between checkout and the request call could
    leak exit:{normal, _} to the caller. The request, body and streaming calls
    now return {error, closed} instead (#861).
  • A proxy host given as an atom (e.g. localhost) or a binary is accepted again
    for the plain, connect and socks5 proxy tuples instead of being silently
    ignored (#858).

This release also bumps quic to 1.6.3, h2 to 0.8.0 and webtransport to 0.3.1.

Changelog: hackney/NEWS.md at master · benoitc/hackney · GitHub
Release: Release 4.2.0 · benoitc/hackney · GitHub
Hex: hackney | Hex

Thanks to mrnovalles for the cross-sign fix.

3 Likes

@benoitc amazing job. Thanks

1 Like