Skip to content

Updated Kestrel HTTP/3 docs #35300

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

Merged
merged 2 commits into from
Apr 25, 2025
Merged

Updated Kestrel HTTP/3 docs #35300

merged 2 commits into from
Apr 25, 2025

Conversation

CarnaViire
Copy link
Member

@CarnaViire CarnaViire commented Apr 24, 2025

Fixes #34880

In general, I tried to align the ASP.NET Core article with the .NET one (Use HTTP/3 with HttpClient)

cc @ManickaP PTAL


Internal previews

📄 File 🔗 Preview link
aspnetcore/fundamentals/servers/kestrel/http3.md aspnetcore/fundamentals/servers/kestrel/http3

@ManickaP
Copy link
Member

ManickaP commented Apr 24, 2025

Moved the "HTTP/3 benefits" section before the "HTTP/3 requirements" section, since the requirements needs to reference QUIC protocol that is introduced there.

I don't think that's necessary and IMHO having the "practical" parts of the docs (requirements etc.) as first makes more sense. When you read the article you wanna know how to start and the info about benefits is optional knowledge.

EDIT: I see, client docs are organized that way although it's structured more like intro than list of benefits. Feel free to dismiss this comment.


HTTP/3 isn't currently supported on macOS and may be available in a future release.
HTTP/3 uses QUIC as its transport protocol. The ASP.NET Core implementation of HTTP/3 depends on [MsQuic](https://github.com/microsoft/msquic) to provide QUIC functionality. As a result, ASP.NET Core support of HTTP/3 depends on MsQuic platform requirements. For more information on how to install **MsQuic**, see [QUIC Platform dependencies](/dotnet/fundamentals/networking/quic/quic-overview#platform-dependencies). If the platform that Kestrel is running on doesn't have all the requirements for HTTP/3, then it's disabled, and Kestrel will fall back to other HTTP protocols.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did I write that? Oh boy is it clunky 😄

Comment on lines 23 to 34
## HTTP/3 requirements

HTTP/3 has different requirements depending on the operating system. If the platform that Kestrel is running on doesn't have all the requirements for HTTP/3, then it's disabled, and Kestrel will fall back to other HTTP protocols.

### Windows

* Windows 11 Build 22000 or later OR Windows Server 2022.
* TLS 1.3 or later connection.

### Linux

* `libmsquic` package installed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@CarnaViire Shouldn't this stay in .NET 8 and lower versions of this document? Ditto for all the other information you deleted. Tell me what needs to stay.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

None of the requirements needs to stay for any version. The new paragraph links to System.Net.Quic requirements that cover the necessary info about which MsQuic version is compatible with what .NET version

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No changes for .NET 9+? If so, I'll remove my .NET 8 version and have one file for .NET 8+

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, all the changes were done in way that they will be compatible with older MsQuic versions. E.g. if newer MsQuic is present, async cert validation will happen; if not, we fallback to the old, sync behavior.

Comment on lines -43 to -45
### macOS
## HTTP/3 requirements

HTTP/3 isn't currently supported on macOS and may be available in a future release.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What version, if any, does this change?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MsQuic is backward compatible and since MsQuic 2.4 we also publish Brew package for it. So technically all officially supported versions but with caveats (it's more complicated to make it load MsQuic), see https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/quic/quic-overview#macos.

Note that all of this is covered in the newly linked requirements.

@Rick-Anderson
Copy link
Contributor

Rick-Anderson commented Apr 24, 2025

@CarnaViire I'm going to start over and add your intentions. Do you want me to PR your PR so you get credit for the commit so should I start a new PR and use your suggestions? Either way I'm starting with the current version in main.
replaced by #35302, you'll get the commit credit

@Rick-Anderson Rick-Anderson merged commit 6639b37 into dotnet:main Apr 25, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

UUF port: Kestrel does not support Network transition: .NET 8 vs future release
3 participants