This is a proposal to add an HTTP/3 client and server implementation in x/net/http3.

Similarly to the accepted form of #58547 (x/net/quic), this proposal is to add an experimental package with an API subject to change during development. Once we have a complete implementation, we will file a separate proposal for API review.

Initial development will be in an internal package (x/net/internal/http3) until the details are firm enough for external testing. We will then move the package to x/net/http3 and (when we have some confidence the API is right) file the API review proposal.

Comment From: gabyhelp

Related Issues

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

Comment From: gopherbot

Change https://go.dev/cl/641496 mentions this issue: quic, internal/quic/quicwire: split wire encode/decode functions to new package

Comment From: gopherbot

Change https://go.dev/cl/641838 mentions this issue: internal/http3: basic stream read/write operations

Comment From: gopherbot

Change https://go.dev/cl/641836 mentions this issue: internal/http3: new package

Comment From: gopherbot

Change https://go.dev/cl/641837 mentions this issue: internal/http3: error codes

Comment From: gopherbot

Change https://go.dev/cl/642115 mentions this issue: internal/http3: qpack wire primitives

Comment From: gopherbot

Change https://go.dev/cl/642516 mentions this issue: internal/http3: add Transport and ClientConn

Comment From: gopherbot

Change https://go.dev/cl/642599 mentions this issue: internal/http3: QPACK encoding and decoding

Comment From: gopherbot

Change https://go.dev/cl/643780 mentions this issue: http2, internal/httpcommon: factor out common request header logic for h2/h3

Comment From: gopherbot

Change https://go.dev/cl/644116 mentions this issue: internal/http3: return error on mid-frame EOF

Comment From: gopherbot

Change https://go.dev/cl/644118 mentions this issue: internal/http3: add RoundTrip

Comment From: gopherbot

Change https://go.dev/cl/644117 mentions this issue: internal/http3: define connection and stream error types

Comment From: gopherbot

Change https://go.dev/cl/644915 mentions this issue: internal/http3: add request/response body transfer

Comment From: gopherbot

Change https://go.dev/cl/646617 mentions this issue: internal/http3: add Server

Comment From: gopherbot

Change https://go.dev/cl/646616 mentions this issue: internal/http3: refactor in prep for sharing transport/server code

Comment From: gopherbot

Change https://go.dev/cl/652455 mentions this issue: http2, internal/httpcommon: factor out server header logic for h2/h3

Comment From: gopherbot

Change https://go.dev/cl/652457 mentions this issue: internal/http3: make read-data tests usable for server handlers

Comment From: gopherbot

Change https://go.dev/cl/653395 mentions this issue: internal/http3: move more common stream processing to genericConn

Comment From: gopherbot

Change https://go.dev/cl/653396 mentions this issue: internal/http3: server handlers

Comment From: aclements

This proposal has been added to the active column of the proposals project and will now be reviewed at the weekly proposal review meetings. — aclements for the proposal review group

Comment From: aclements

Just to clarify, is the intent to put x/net/http3 behind a GOEXPERIMENT and have a separate proposal for stabilizing the API?

Comment From: aclements

It turns out it's annoying to put this behind a GOEXPERIMENT because the list of experiments is managed in the main repo.

We could use a build tag instead.

Another option is x/exp, but that's much more painful for users to migrate away from once this is stabilized, and we'd lose all the commit history once it moved to x/net.

Comment From: asoseil

Putting it under a build tag makes sense. Could we target this for the next minor release?