Использование ASP.NET Core с HTTP/2 в службах IIS
Автор Джастин Коталик (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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по