Использование ASP.NET Core с HTTP/2 в службах IIS
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 9 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 9 этой статьи.
Автор Джастин Коталик (Justin Kotalik)
HTTP/2 поддерживается в ASP.NET Core для следующих сценариев развертывания IIS:
- Windows Server 2016 или более поздней версии либо Windows 10 или более поздней версии
- Службы IIS 10 или более поздней версии
- Подключение TLS 1.2 или более поздней версии
- Размещение вне процесса. Подключения к пограничным серверам, открытым для общего доступа, выполняются по протоколу HTTP/2, а подключение к серверу Kestrel через обратный прокси-сервер — по протоколу HTTP/1.1.
При внутрипроцессном развертывании и установленном подключении HTTP/2 HttpRequest.Protocol
возвращает HTTP/2
. При внепроцессном развертывании и установленном подключении HTTP/2 HttpRequest.Protocol
возвращает HTTP/1.1
.
Дополнительные сведения о внутри- и внепроцессных моделях размещения см. в статье Модуль ASP.NET Core (ANCM) для IIS.
Протокол HTTP/2 включен по умолчанию для соединений по HTTPS/TLS. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1. Дополнительные сведения о настройке HTTP/2 для развертываний IIS см. в статье об HTTP/2 в IIS.
Расширенные возможности HTTP/2 для поддержки gRPC
Дополнительные возможности HTTP/2 в службах IIS поддерживают gRPC, включая трейлеры ответов и отправку кадров сброса.
Требования для выполнения gRPC в службах IIS
- Внутрипроцессное размещение.
- Windows 11 сборки 22000 или более поздней, Windows Server 2022 сборки 20348 или более поздней.
- Подключение TLS 1.2 или более поздней версии.
Трейлеры
Трейлеры HTTP похожи на заголовки HTTP, за исключением того, что они отправляются после отправки текста ответа. Для IIS и HTTP.sys поддерживаются только трейлеры ответов HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
В приведенном выше примере кода:
SupportsTrailers
обеспечивает поддержку трейлеров для ответа;DeclareTrailer
добавляет заданное имя трейлера в заголовок ответаTrailer
. Объявлять трейлеры ответа необязательно, но рекомендуется. ВызовDeclareTrailer
должен производиться перед отправкой заголовков ответа.AppendTrailer
добавляет трейлер.
Reset
Сброс позволяет серверу сбросить запрос HTTP/2 с указанным кодом ошибки. Сброшенный запрос считается прерванным.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
в предыдущем примере кода задает код ошибки INTERNAL_ERROR
. Дополнительные сведения о кодах ошибок HTTP/2 см. в соответствующем разделе спецификации HTTP/2.
ASP.NET Core