-
Notifications
You must be signed in to change notification settings - Fork 10k
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
Reconsider enabling HTTP/3 by default in .NET 8 #50131
Comments
I've chatted with a few folks on the team and we're currently leaning towards 3. 2 seemed like a good compromise, but we worry about the consequences of having the default protocol be different between development and production. |
Agree, lets turn it off by default 😄 . |
Agreed, disable it by default. |
@richlander you were just now asking about this but with container size motivation. |
My 2c is that I think we have some level of obligation as the .NET web app dev platfrom to advocate for protocol advancement. That doesn't necessarily mean we have to enable HTTP/3 this time but I do think we need to work with the Defender team so that Windows better handles HTTP/3 endpoints for development and with Chrome/Edge to make sure that the developer experience for inner loop development on HTTP/3 is improved moving forward. |
Absolutely @mitchdenny. I've kicked off that conversation with the Windows team and we should continue to advocate for the best experience possible here. I'm hopeful that in a future release we'll be able to go HTTP/3 by default without the drawbacks I mentioned above. |
Container tracking issue: dotnet/dotnet-docker#4385 (comment) Needless to say, if HTTP/3 is disabled by default, we won't seek to add it to any container images. We should also have a discussion with the the msquic team. The size of |
I've opened a PR for this in the RC1 branch since it's not clear to me whether we want to make this change in main for now. I'm open to feedback/thoughts about that. |
Note: we'll need to update docs as well when this change goes in. |
Defender is doing the right thing though, right? If msquic is opening up non-loopback listen sockets at the application layer, it should trigger the firewall. Or is the non-loopback socket really owned by the kernel somehow?
Does msquic really have to create a wildcard listener up front? Couldn't it bind to only loopback at first if that's all the application needs to listen to, and then "any" IP at a later point only if another application/binding on the same port requires it? For example, if you do:
It won't listen for external connections, but if you also do:
in another process and start it afterwards while keeping the I could see how it could be a pain to deal with multiple bindings for internal and external connections when a single binding should be sufficient, but I don't see what prevents it. It seems worthwhile if it helps avoid legitimate Windows Defender warnings. |
You are right that theoretically it can be done, but it is very complicated to manage different sockets with dynamically changing requirements from possibly independent applications layers. We'd likely have to support a combination of separate, but related sockets, "upgrading" a socket, and "downgrading" a socket based on different scenario. I'm not convinced the extra complexity and regression risk is worth not getting a popup for localhost only (test?) app. |
Closing this issue; we went back to having HTTP/3 be opt-in for .NET 8 (in #50243). We should re-evaluate this in the future if we (together with Windows and browsers) can make the experience better. |
We've had HTTP/3 enabled by default in Kestrel since .NET 8 Preview 1. As we are about to wrap up .NET 8 we need to decide whether to ship with that left as-is, or go back to having HTTP/3 support being opt-in.
Reasons to reconsider the default
We believe this occurs because of the way msquic (which .NET's QUIC support is built upon) has to create its listener. It has to grab a wildcard listener up front because of how it supports multiplexing multiple apps on the same UDP port.
Options
The text was updated successfully, but these errors were encountered: