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

HTTP/3: Enable in Kestrel by default #36486

Closed
JamesNK opened this issue Sep 13, 2021 · 9 comments · Fixed by #44217
Closed

HTTP/3: Enable in Kestrel by default #36486

JamesNK opened this issue Sep 13, 2021 · 9 comments · Fixed by #44217
Labels
area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions HTTP3

Comments

@JamesNK
Copy link
Member

JamesNK commented Sep 13, 2021

Turn on HTTP/3 by default in .NET 7, i.e. default protocol is Http1AndHttp2AndHttp3. 🌶️ 🔥 💥

Should do this sooner rather than later to get feedback in .NET 7 previews.

@adityamandaleeka
Copy link
Member

adityamandaleeka commented Sep 30, 2021

Before we enable H3 by default, we need:

@adityamandaleeka
Copy link
Member

Related: #37151

@halter73
Copy link
Member

halter73 commented Aug 2, 2022

HTTP/3 support has now been enabled by default in HttpClient (dotnet/runtime#73153). I'm nervous about doing this in .NET 7 for Kestrel though. I feel that HTTP/2 had more bake time before we enabled it by default.

I'm worried we're not properly hardened and perf tested given issues like dotnet/runtime#49972 and #32034. @stephentoub

@sebastienros Do we have any HTTP/2 vs HTTP/3 benchmarks? Anything on https://aka.ms/aspnet/benchmarks?

@stephentoub
Copy link
Member

stephentoub commented Aug 2, 2022

HTTP/3 support has now been enabled by default in HttpClient

You still need to opt-in to sending HTTP/3 requests, e.g. set the http message request version to 3.0, or set the version policy to request version or higher. It's just that before that PR, you also had to toggle an appcontext switch or else HTTP/3 wasn't available at all.

@halter73
Copy link
Member

halter73 commented Aug 2, 2022

I see. That's similar to how you currently have to opt-in with HttpProtocols.Http3 (or more likely HttpProtocols.Http1AndHttp2AndHttp3 for the alt-svc header to work) for Kestrel.

@JamesNK
Copy link
Member Author

JamesNK commented Aug 2, 2022

We removed the preview flags from HttpProtocol.Http3 and HttpProtocol.Http1AndHttp2AndHttp3 in Kestrel many previews ago.

I'm leaning towards leaving HTTP/3 opt-in in .NET 7 for Kestrel. We haven't seen any issues reported for it. Either there are no bugs or problems, or few people are using it so far.

@YohanSciubukgian
Copy link

YohanSciubukgian commented Aug 3, 2022

Do you know if the communication between IIS and Kestrel in out-of-process scenario is upgraded to HTTP/3 (for .NET 7) by default if it's supported by both servers ?

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/http3?view=aspnetcore-6.0

HTTP/3 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • In-process
  • Out-of-Process. In Out-of-Process, IIS responds to the client using HTTP/3, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.

@rwkarg
Copy link

rwkarg commented Aug 26, 2022

If HTTP/3 were "Enabled by default" then would that mean a client connecting would get upgraded to HTTP/3 without a specific opt-in?
I think that would mean that services behind a TCP load balancer (not UDP) would have clients told to upgrade to HTTP/3, fail to connect over UDP, then need to come back on HTTP/2 over TCP. Not sure what the performance impact would be on connections in that scenario.

@Tratcher Tratcher changed the title HTTP/3: Enable in Kestrel by default in .NET 7 HTTP/3: Enable in Kestrel by default Sep 9, 2022
@ghost
Copy link

ghost commented Sep 9, 2022

Thanks for contacting us.

We're moving this issue to the .NET 8 Planning milestone for future evaluation / consideration. We would like to keep this around to collect more feedback, which can help us with prioritizing this work. We will re-evaluate this issue, during our next planning meeting(s).
If we later determine, that the issue has no community involvement, or it's very rare and low-impact issue, we will close it - so that the team can focus on more important and high impact issues.
To learn more about what to expect next and how this issue will be handled you can read more about our triage process here.

@ghost ghost locked as resolved and limited conversation to collaborators Nov 3, 2022
@amcasey amcasey added area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions and removed area-runtime labels Jun 2, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-networking Includes servers, yarp, json patch, bedrock, websockets, http client factory, and http abstractions HTTP3
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants