connect-go
connect-go copied to clipboard
HTTP3 support
Is your feature request related to a problem? Please describe.
Nope
Describe the solution you'd like
It would be great if Connect supported HTTP 3 workloads
Describe alternatives you've considered
I've tried several different solutions, like gRPC, Cap'n Proto, and libp2p-go, but any HTTP3 support is either unavailable or requires a lot of manual effort
Additional context
QUIC has really changed the way that modern networking can be leveraged, so it would be great to be able to leverage it through HTTP3 when building modern applications
Hi @mxplusb. Thanks for taking the time to file this issue!
It would be great if Connect supported HTTP 3 workloads
Agreed! It looks like we'll be able to implement HTTP/3 support in earnest once it's available in Go's net/http package (see https://github.com/golang/go/issues/32204).
Great, thanks!
@njhale is correct - once net/http supports HTTP/3, connect-go will support it automatically.
However, you can use HTTP/3 today! Because connect-go is built around the standard library's http.Handler and http.Client types, it also works with lucas-clemente/quic-go's HTTP/3 implementation. The Connect and gRPC-Web protocols work today; the standard gRPC protocol will work as soon as https://github.com/lucas-clemente/quic-go/issues/2266 is fixed.
Hope that helps!
I was wondering about that, thank you!
Just wanted to jump in here, we have shipped and have been playing with HTTP/3 paired with connect for a while now. At least for our use cases, there haven't been any issues. We also use paired it with the lucas-clemente/quic-go implementation.
In our case, we don't need support of the actual gRPC protocol over HTTP/3, that seems like it'd be a... very niche use case.
We simply use the Connect protocol and gRPC-web without any issues. And we are using this in a production capacity, albeit, traffic over HTTP/3 is very minimal. Hopefully we can change that since early results are very promising. :)
Oh right, I also have a hack in place to work around https://github.com/lucas-clemente/quic-go/pull/3623
But I think this would be also a rather niche edge case for others. Entirely unrelated to connect-go tho.
There's nothing that connect-go can do to accelerate this, so I'm going to close this issue:
- When
net/httpsupports HTTP/3,connect-gowill automatically support the new protocol. - The Connect and gRPC-Web protocols mostly work with
lucas-clemente/quic-gotoday. Whenquic-gosupports HTTP trailers, the standard gRPC protocol will work too.
For posterity, anyone interested in HTTP/3 should also check out @mattrobenolt's blog post: https://planetscale.com/blog/faster-mysql-with-http3
@njhale is correct - once net/http supports HTTP/3, connect-go will support it automatically.
However, you can use HTTP/3 today! Because connect-go is built around the standard library's
http.Handlerandhttp.Clienttypes, it also works with lucas-clemente/quic-go's HTTP/3 implementation. The Connect and gRPC-Web protocols work today; the standard gRPC protocol will work as soon as quic-go/quic-go#2266 is fixed.Hope that helps!
Is there a demo repo of using Connect/gRPC-Web protocols over QUIC? My search is not turning up a working example.
@StevenACoffman http3 support is tested using the github.com/quic-go/quic-go package in the conformance tests.
Support for http3 in the std libs net/http library is ongoing, see this issue