Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP3 support #361

Closed
siennathesane opened this issue Sep 16, 2022 · 9 comments
Closed

HTTP3 support #361

siennathesane opened this issue Sep 16, 2022 · 9 comments
Labels
enhancement New feature or request

Comments

@siennathesane
Copy link

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

@siennathesane siennathesane added the enhancement New feature or request label Sep 16, 2022
@njhale
Copy link

njhale commented Sep 16, 2022

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 golang/go#32204).

@siennathesane
Copy link
Author

Great, thanks!

@akshayjshah
Copy link
Member

akshayjshah commented Sep 17, 2022

@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 quic-go/quic-go#2266 is fixed.

Hope that helps!

@siennathesane
Copy link
Author

I was wondering about that, thank you!

@akshayjshah akshayjshah pinned this issue Sep 19, 2022
@mattrobenolt
Copy link
Contributor

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. :)

@mattrobenolt
Copy link
Contributor

Oh right, I also have a hack in place to work around quic-go/quic-go#3623

But I think this would be also a rather niche edge case for others. Entirely unrelated to connect-go tho.

@tonyli233 tonyli233 unpinned this issue Jan 26, 2023
@akshayjshah
Copy link
Member

There's nothing that connect-go can do to accelerate this, so I'm going to close this issue:

  • When net/http supports HTTP/3, connect-go will automatically support the new protocol.
  • The Connect and gRPC-Web protocols mostly work with lucas-clemente/quic-go today. When quic-go supports 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

@StevenACoffman
Copy link

@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 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.

@emcfarlane
Copy link
Contributor

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

6 participants