Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
HTTP/3 является третьей и недавно стандартизованной основной версией HTTP. HTTP/3 использует ту же семантику, что и HTTP/1.1 и HTTP/2: те же методы запроса, коды состояния и поля сообщений применяются ко всем версиям. Различия заключаются в основном транспортном механизме. HTTP/1.1 и HTTP/2 используют TCP в качестве транспорта. HTTP/3 использует технологию транспорта, разработанную вместе с HTTP/3 под названием QUIC.
HTTP/3 и QUIC имеют несколько преимуществ по сравнению с HTTP/1.1 и HTTP/2:
- Быстрое время отклика для первого запроса. QUIC и HTTP/3 устраивают подключение через меньшее количество обменов данными между клиентом и сервером. Первый запрос быстрее достигает сервера.
- Улучшен пользовательский опыт при потере пакетов подключения. HTTP/2 выполняет мультиплексирование нескольких запросов через одно TCP-соединение. Потеря пакетов в соединении влияет на все запросы. Эта проблема называется блокировкой очереди. Так как QUIC предоставляет встроенное мультиплексирование, потерянные пакеты влияют только на те запросы, где были потеряны данные.
- Поддерживает переход между сетями. Эта функция полезна для мобильных устройств, где обычно переключаются между сетями Wi-Fi и сотовыми, когда мобильное устройство меняет расположение. В настоящее время подключения HTTP/1.1 и HTTP/2 завершаются ошибкой при переключении сетей. Приложение или веб-браузер должен повторить все неудачные HTTP-запросы. HTTP/3 позволяет приложению или веб-браузеру без перебоев продолжить работу при изменении сети. HttpClient и Kestrel не поддерживают сетевые переходы в .NET 7. Эта возможность может быть доступна в следующем выпуске.
Это важно
Приложения, настроенные на использование преимуществ HTTP/3, должны поддерживать протоколы HTTP/1.1 и HTTP/2. Если проблемы определены в протоколе HTTP/3, рекомендуется отключить HTTP/3, пока проблемы не будут устранены в будущем выпуске .NET.
Параметры HttpClient
Версию HTTP можно настроить, установив HttpRequestMessage.Version на 3.0. Однако, так как не все маршрутизаторы, брандмауэры и прокси-серверы правильно поддерживают ПРОТОКОЛ HTTP/3, рекомендуется настроить HTTP/3 вместе с HTTP/1.1 и HTTP/2. Для HttpClientэтого можно указать следующее:
- HttpRequestMessage.Version до 1.1.
- HttpRequestMessage.VersionPolicy изменено на HttpVersionPolicy.RequestVersionOrHigher.
Зависимости платформы
HTTP/3 использует QUIC в качестве транспортного протокола. Реализация .NET HTTP/3 использует MsQuic для предоставления функциональных возможностей QUIC. В результате поддержка .NET http/3 зависит от требований платформы MsQuic. Дополнительные сведения об установке MsQuic см. в разделе "Зависимости платформы QUIC". Если платформа, на которую работает HttpClient, не имеет всех требований для HTTP/3, то она отключена.
Использование HttpClient
В следующем примере кода используются операторы верхнего уровня и показано, как указать HTTP3 в запросе:
// See https://aka.ms/new-console-template for more information
using System.Net;
using var client = new HttpClient
{
DefaultRequestVersion = HttpVersion.Version30,
DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact
};
Console.WriteLine("--- localhost:5001 ---");
HttpResponseMessage resp = await client.GetAsync("https://localhost:5001/");
string body = await resp.Content.ReadAsStringAsync();
Console.WriteLine(
$"status: {resp.StatusCode}, version: {resp.Version}, " +
$"body: {body.Substring(0, Math.Min(100, body.Length))}");
Поддержка HTTP/3 в .NET 6
В .NET 6 http/3 доступен в качестве предварительной версии функции , так как спецификация HTTP/3 еще не завершена. Проблемы с поведением или производительностью могут существовать в HTTP/3 с .NET 6. Дополнительные сведения о функциях предварительной версии см. в спецификации предварительных версий.
Чтобы включить поддержку HTTP/3 в .NET 6, добавьте узел RuntimeHostConfigurationOption в файл проекта для активации HTTP/3 с помощью HttpClient.
<ItemGroup>
<RuntimeHostConfigurationOption Value="true"
Include="System.Net.SocketsHttpHandler.Http3Support" />
</ItemGroup>
Кроме того, можно вызвать System.AppContext.SetSwitch из кода приложения или задать для переменной DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT среды значение true. Дополнительные сведения см. в разделе переменных среды .NET: DOTNET_SYSTEM_NET_HTTP_*.
Причиной требования флага конфигурации для HTTP/3 является защита приложений от будущих сбоев при использовании политики RequestVersionOrHigherверсий. При вызове сервера, в настоящее время использующего протокол HTTP/1.1 и HTTP/2, если сервер позже обновляется до HTTP/3, клиент попытается использовать HTTP/3 и потенциально несовместим, так как стандарт не является окончательным и поэтому может измениться после выпуска .NET 6.
.NET 6 совместим только с версиями libmsquic версии 1.9.x. Libmsquic 2.x несовместим с .NET 6 из-за критических изменений в библиотеке. Libmsquic получает обновления до версии 1.9.x при необходимости добавления исправлений безопасности.
HTTP/3 Server
HTTP/3 поддерживается ASP.NET с сервером Kestrel в .NET 6 (предварительная версия) и .NET 7 (полностью поддерживается). Для получения дополнительной информации см. раздел о использовании HTTP/3 с веб-сервером ASP.NET Core Kestrel.
Общедоступные тестовые серверы
Cloudflare размещает сайт для HTTP/3, который можно использовать для тестирования клиента https://cloudflare-quic.com.