Skip to content

Commit 09c0f39

Browse files
authored
clarify linux portions of http3/libmsquic (#38901)
1 parent 077dec0 commit 09c0f39

File tree

2 files changed

+49
-13
lines changed

2 files changed

+49
-13
lines changed

docs/core/extensions/httpclient-http3.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ HTTP/3 and QUIC both have several benefits compared to HTTP/1.1 and HTTP/2:
1717
- Supports transitioning between networks. This feature is useful for mobile devices where it's common to switch between WIFI and cellular networks as a mobile device changes location. Currently, HTTP/1.1 and HTTP/2 connections fail with an error when switching networks. An app or web browser must retry any failed HTTP requests. HTTP/3 allows the app or web browser to seamlessly continue when a network changes. <xref:System.Net.Http.HttpClient> and Kestrel don't support network transitions in .NET 7. It may be available in a future release.
1818

1919
> [!IMPORTANT]
20-
>
2120
> Apps configured to take advantage of HTTP/3 should be designed to also support HTTP/1.1 and HTTP/2. If issues are identified in HTTP/3, it's recommend disabling HTTP/3 until the issues are resolved in a future release of .NET.
2221
2322
## HttpClient settings
@@ -29,7 +28,7 @@ The HTTP version can be configured by setting `HttpRequestMessage.Version` to 3.
2928

3029
## Platform dependencies
3130

32-
HTTP/3 uses QUIC as its transport protocol. The .NET implementation of HTTP/3 uses [MsQuic](https://github.com/microsoft/msquic) to provide QUIC functionality. As a result, .NET support of HTTP/3 depends on MsQuic platform requirements, which are documented in [QUIC Platform dependencies](../../fundamentals/networking/quic/quic-overview.md#platform-dependencies). If the platform that HttpClient is running on doesn't have all the requirements for HTTP/3, then it's disabled.
31+
HTTP/3 uses QUIC as its transport protocol. The .NET implementation of HTTP/3 uses [MsQuic](https://github.com/microsoft/msquic) to provide QUIC functionality. As a result, .NET support of HTTP/3 depends on MsQuic platform requirements. For more information on how to install **MsQuic**, see [QUIC Platform dependencies](../../fundamentals/networking/quic/quic-overview.md#platform-dependencies). If the platform that HttpClient is running on doesn't have all the requirements for HTTP/3, then it's disabled.
3332

3433
## Using HttpClient
3534

@@ -54,11 +53,11 @@ Alternatively, you can call <xref:System.AppContext.SetSwitch%2A?displayProperty
5453

5554
The reason for requiring a configuration flag for HTTP/3 is to protect apps from future breakage when using version policy `RequestVersionOrHigher`. When calling a server that currently uses HTTP/1.1 and HTTP/2, if the server later upgrades to HTTP/3, the client would try to use HTTP/3 and potentially be incompatible as the standard isn't final and therefore may change after .NET 6 is released.
5655

57-
.NET 6 is only compatible with the 1.9.x versions of libmsquic. Libmsquic 2.x isn't compatible with .NET 6 due to breaking changes in the library. Libmsquic receives updates to 1.9.x when needed to incorporate security fixes.
56+
.NET 6 is only compatible with the 1.9.x versions of libmsquic. Libmsquic 2.x isn't compatible with .NET 6 due to breaking changes in the library. Libmsquic receives updates to 1.9.x when needed to incorporate security fixes.
5857

5958
## HTTP/3 Server
6059

61-
HTTP/3 is supported by ASP.NET with the Kestrel server in .NET 6 (preview) and .NET 7 (fully supported). For more information, see [use HTTP/3 with the ASP.NET Core Kestrel web server][http3Kestrel].
60+
HTTP/3 is supported by ASP.NET with the Kestrel server in .NET 6 (as a preview) and .NET 7 (is fully supported). For more information, see [use HTTP/3 with the ASP.NET Core Kestrel web server][http3Kestrel].
6261

6362
## Public test servers
6463

docs/fundamentals/networking/quic/quic-overview.md

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ From the implementation perspective, `System.Net.Quic` depends on [MsQuic](https
3434

3535
## Platform dependencies
3636

37+
The following sections describe the platform dependencies for QUIC in .NET.
38+
3739
### Windows
3840

3941
- Windows 11, Windows Server 2022, or later. (Earlier Windows versions are missing the cryptographic APIs required to support QUIC.)
@@ -42,20 +44,55 @@ On Windows, msquic.dll is distributed as part of the .NET runtime, and no other
4244

4345
### Linux
4446

45-
All the following dependencies are stated in the `libmsquic` package manifest and are automatically installed by the package manager:
47+
> [!NOTE]
48+
> .NET 7+ is only compatible with 2.2+ versions of libmsquic.
4649
47-
- OpenSSL 3+ or 1.1 - depends on the default OpenSSL version for the distribution version, for example, OpenSSL 3 for [Ubuntu 22](https://packages.ubuntu.com/jammy/openssl) and OpenSSL 1.1 for [Ubuntu 20](https://packages.ubuntu.com/focal/utils/openssl).
50+
The `libmsquic` package is required on Linux. This package is published in Microsoft's official Linux package repository, <https://packages.microsoft.com>. You must add this repository to your package manager before installing the package. For more information, see [Linux Software Repository for Microsoft Products](/linux/packages).
4851

49-
- libnuma 1
52+
> [!CAUTION]
53+
> Adding the Microsoft pacakge repository may conflict with your distribution's repository when your distribution's repository provides .NET and other Microsoft packages. To avoid or troubleshoot package mixups, review [Troubleshoot .NET errors related to missing files on Linux](../../../core/install/linux-package-mixup.md#whats-going-on).
5054
51-
On Linux, libmsquic is published via Microsoft's official Linux package repository, <https://packages.microsoft.com>. To consume libmsquic, you must add it manually. For more information, see [Linux Software Repository for Microsoft Products](/windows-server/administration/linux-package-repository-for-microsoft-software). After configuring the package feed, it's installed via the package manager of your distro, for example, for Ubuntu:
55+
##### Examples
5256

53-
```bash
54-
sudo apt install libmsquic
55-
```
57+
Here are some examples of using a package manager to install `libmsquic`:
5658

57-
> [!NOTE]
58-
> .NET 7 is only compatible with 2.2+ versions of libmsquic.
59+
- **APT**
60+
61+
```bash
62+
sudo apt-get libmsquic
63+
```
64+
65+
- **APK**
66+
67+
```bash
68+
sudo apk add libmsquic
69+
```
70+
71+
- **DNF**
72+
73+
```bash
74+
sudo dnf install libmsquic
75+
```
76+
77+
- **zypper**
78+
79+
```bash
80+
sudo zypper install libmsquic
81+
```
82+
83+
- **YUM**
84+
85+
```bash
86+
sudo yum install libmsquic
87+
```
88+
89+
##### Dependencies of libmsquic
90+
91+
All the following dependencies are stated in the `libmsquic` package manifest and are automatically installed by the package manager:
92+
93+
- OpenSSL 3+ or 1.1 - depends on the default OpenSSL version for the distribution version, for example, OpenSSL 3 for [Ubuntu 22](https://packages.ubuntu.com/jammy/openssl) and OpenSSL 1.1 for [Ubuntu 20](https://packages.ubuntu.com/focal/utils/openssl).
94+
95+
- libnuma 1
5996

6097
### macOS
6198

0 commit comments

Comments
 (0)