Breaking Changes
quic-go has moved from the private GitHub account of lucas-clemente
to a dedicated org, quic-go
. Now all the QUIC-related repositories (the various qtls forks of crypto/tls, our QPACK implementation, webtransport-go etc.) are now all located under this org. Note that this will require users to update the import path in go.mod
as well as in Go files. The new import path is github.com/quic-go/quic-go
.
Notable Changes
- We now have support for Go 1.20, which was released earlier today.
- This release dramatically reduces the number of allocations that happen when transferring large amount of data on a stream. This is the result of a large effort to reduce and amortize allocations across the entire code base. See the linked PRs in #3526 for a list of related changes.
- We have (finally!) resolved a very old issue (#765) that made using HTTP/3 clients quite cumbersome: #3684.
- The
ConnectionState
method on theConnection
can now be called at any time. It doesn't block until completion of the TLS handshake any more: #3636. - QUIC v2 support was updated to the current IETF draft: #3631
- It is now possible to accept connections right after receiving the ClientHello on the server side, i.e. 0.5 RTTs after the client started the handshake using
ListenEarly
. UsingListenEarly
does not enable 0-RTT support any more, instead, 0-RTT is controlled via theAllow0RTT
callback in theConfig
: #3635.
Changelog
- http3: simplify if condition in roundtripper by @aviscode in #3658
- update golang.org/x packages to tagged versions by @marten-seemann in #3628
- use the generic linked list for the token store by @marten-seemann in #3654
- fix flaky datagram queue test by @marten-seemann in #3650
- use ed25519 instead of RSA keys in integration tests by @marten-seemann in #3661
- update QUIC v2 support to draft-ietf-quic-v2-08 by @marten-seemann in #3631
- only call tls.CipherSuiteName if logging is on, reducing allocations by @marten-seemann in #3632
- add Allow0RTT opt in the quic.Config to control 0-RTT on the server side by @marten-seemann in #3635
- fix flaky counting of 0-RTT packets in integration test by @marten-seemann in #3669
- fix flaky send queue test by @marten-seemann in #3668
- use a sync.Pool to reduce allocation of linked list elements by @marten-seemann in #3655
- use a separate code path for handling short header packets by @marten-seemann in #3644
- refactor header writing to append to a byte slice by @marten-seemann in #3646
- avoid allocating a shortHeaderPacket struct in the PackPacket path by @marten-seemann in #3647
- make ConnectionState usable during the handshake by @marten-seemann in #3636
- pass payload around by value in the packet packer by @marten-seemann in #3648
- use a sync.Pool for ackhandler.Frames by @marten-seemann in #3656
- add support for Go 1.20 by @marten-seemann in #3641
- remove version parameter from constructors where they are not needed by @marten-seemann in #3639
- update imports to use qtls and qpack from quic-go GitHub organization by @marten-seemann in #3676
- rename module, adjust import paths to quic-go/quic-go by @marten-seemann in #3680
- http3: use HTTP/2 as the default protocol in ListenAndServe by @mstmdev in #3673
- README: add AdGuard Home to project list by @bt90 in #3574
- README: replace go-ipfs with go-libp2p by @marten-seemann in #3682
- return StreamErrors for all kinds of stream cancelations by @marten-seemann in #3681
- http3: change status codes to const by @aviscode in #3683
- http3: correctly handle closed clients by @marten-seemann in #3684
- reject invalid active_connection_id_limit transport parameter values by @marten-seemann in #3687
- update for Go 1.20 by @marten-seemann in #3688
New Contributors
Full Changelog: v0.31.1...v0.32.0