-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Description
HTTP3 is the next major version of HTTP and the successor to HTTP2. It is in the final stages of standardization in the IETF. Some browsers (notably Chrome) already support draft versions of HTTP3. HTTP3 runs over QUIC, which replaces TCP as the underlying transport. QUIC is also in the final stages of standardization in the IETF. It provides secure, multiplexed streams over UDP. QUIC is a general-purpose, extensible transport protocol and we expect it to be used by other application protocols aside from HTTP3.
Work Items
- A set of public classes for using the QUIC protocol on either client or server. This is System.Net.Quic. It is the equivalent of System.Net.Sockets for the QUIC protocol.
- HTTP3 client support in HttpClient/SocketsHttpHandler.
- Linux support
- MacOS support
P0
- [QUIC] QuicListener.ListenEndPoint returns a port of 0 if Start() hasn't been called #2262 - Improve QuicListener API to not have non-functional properties
- [QUIC] Update MsQuic GCHandles #31695 - Use GCHandles
- [QUIC] QuicStream.ReadAsync against an aborted connection returns End Of Stream #32050 - Fix stream read returning 0 on connection abort
- [QUIC] Implement better QUIC status code messages #32066 - Improve error messages and move to resources
- [QUIC] Use server TLS options in QUIC #32071 - TLS server options
- [QUIC] Improve error handling for QUIC event callbacks #32072 - Handle exceptions within MsQuic callbacks
- [QUIC] Don't leak QUIC session upon QuicListener disposal #32073 - Fix QuicListener disposal leaking MsQuic handles
- [QUIC] Finalize QUIC stream abort model #32075 - Finalize "abortive dispose" model
- [QUIC] Decide how to handle QUIC stream limits #32079 - Implement stream availability events
- [QUIC] Finalize QUIC dispose model #32142 - Finalize dispose model
- Update MsQuic #44580 - Update MsQuic
- [QUIC] Design of Shutdown for QuicStreams in System.Net.Quic #756 - Finalize shutdown behavior
- Add tests
- [QUIC] Use client TLS options in QUIC #32069 - TLS client options
- [QUIC] Support cancellation of QUIC writes #32077 - Implement Write cancellation support
- QuicConnection.RemoteEndPoint should be IPEndPoint, not EndPoint #43000 - Make RemoteEndPoint an IPEndPoint
P1
- [QUIC] Improve MSQuic OS Version detection #32575 - Implement platform compatibility detection
- [QUIC] Optimize stream reads #42651 - Optimized stream reads
- [QUIC] Use shared SocketAddress code in QUIC #32068 - Remove duplicate SOCKADDR code
- [QUIC] Support synchronous QUIC APIs #32076 - Optimize synchronous QuicStream APIs
- [QUIC] Does QUIC need sync versions of non-Stream APIs? #43792 - (Decide if needed and) Implement sync APIs
- [QUIC] Split out MsQuic configuration from connection #42642 - (Decide if needed and) Split out configuration APIs
- QuicStream: Consider requiring Flush to guarantee data is sent #44782 - Implement flush capability
P2
- [QUIC] Participate in QUIC interop testing #43061 - (Decide if needed and) Participate in QUIC interop testing
We have already made some progress on this in .NET 5.0 and are delivering HTTP3 support in a “preview”, unsupported capacity. There is no public API for QUIC in .NET 5.0.
We intend to share as much HTTP3 code as is reasonably possible between the client and server implementation.