Closed
Description
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
- On Windows, launching an ASP.NET Core app for the first time with HTTP/3 causes a Defender warning to appear, asking you to confirm if the app should be allowed to communicate on Domain/Private/Public networks. This is added friction that we didn't have before, and is especially annoying if you work with multiple apps (you'll get a pop up for each one).
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.
- Getting HTTP/3 actually working locally with a browser takes a few extra steps. Browsers don't allow self-signed certificates on HTTP/3, so there's some effort required to get the end-to-end working anyway, and having to explicitly enable HTTP/3 on the server side isn't a huge added cost.
Options
- Do nothing; HTTP/3 will be enabled by default in .NET 8.
- Developers on Windows will get the above Defender pop-ups the first time they launch a specific app (subsequent launches of the same application will not trigger the pop-up unless it is renamed).
- Disable HTTP/3 by default only in Development mode (leave it enabled by default in other modes). Developers who want it will be able to easily enable it.
- The downside of this is that things will run differently by default during development than how they run in production.
- Disable HTTP/3 by default in all modes. Developers who want it will be able to easily enable it.
- Keep the status quo in .NET 8. People who do nothing to opt into HTTP/3 will continue to get HTTP/1 and /2 by default.