Skip to content

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 requirements

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