Использование HTTP/2 с веб-сервером Kestrel для ASP.NET Core
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
Протокол HTTP/2 доступен для приложений ASP.NET Core, если выполнены следующие базовые требования:
- Операционная система
- Windows Server 2016 либо Windows 10 или более поздних версий‡
- Linux с OpenSSL 1.0.2 или более поздней версии (например, Ubuntu 16.04 или более поздней версии)
- macOS 10.15 или более поздней версии
- Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
- Подключение с поддержкой согласования протокола уровня приложений (ALPN).
- Подключение TLS 1.2 или более поздней версии
‡Kestrel имеет ограниченную поддержку HTTP/2 в Windows Server 2012 R2 и Windows 8.1. Поддержка ограничена из-за небольшого числа поддерживаемых комплектов шифров TLS, доступных для этих операционных систем. Для обеспечения безопасности TLS-подключений может потребоваться сертификат, созданный с использованием алгоритма ECDSA.
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2
.
Начиная с версии .NET Core 3.0 протокол HTTP/2 по умолчанию включен. Дополнительные сведения о конфигурации см. в разделах, посвященных ограничениям HTTP/2 в Kestrel и ListenOptions.Protocols.
Расширенные возможности HTTP/2
Дополнительные возможности HTTP/2 в Kestrel поддерживают gRPC, включая трейлеры ответов и отправку кадров сброса.
Трейлеры
Трейлеры 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.
Протокол HTTP/2 доступен для приложений ASP.NET Core, если выполнены следующие базовые требования:
- Операционная система†
- Windows Server 2016 либо Windows 10 или более поздних версий‡
- Linux с OpenSSL 1.0.2 или более поздней версии (например, Ubuntu 16.04 или более поздней версии)
- Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
- Подключение с поддержкой согласования протокола уровня приложений (ALPN).
- Подключение TLS 1.2 или более поздней версии
†HTTP/2 будет поддерживаться для macOS в будущих выпусках. ‡Kestrel имеет ограниченную поддержку HTTP/2 в Windows Server 2012 R2 и Windows 8.1. Поддержка ограничена из-за небольшого числа поддерживаемых комплектов шифров TLS, доступных для этих операционных систем. Для обеспечения безопасности TLS-подключений может потребоваться сертификат, созданный с использованием алгоритма ECDSA.
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2
.
Начиная с версии .NET Core 3.0 протокол HTTP/2 по умолчанию включен. Дополнительные сведения о конфигурации см. в разделах, посвященных ограничениям HTTP/2 в Kestrel и ListenOptions.Protocols.
Расширенные возможности HTTP/2
Дополнительные возможности HTTP/2 в Kestrel поддерживают gRPC, включая трейлеры ответов и отправку кадров сброса.
Трейлеры
Трейлеры 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.
Протокол HTTP/2 доступен для приложений ASP.NET Core, если выполнены следующие базовые требования:
- Операционная система†
- Windows Server 2016 либо Windows 10 или более поздних версий‡
- Linux с OpenSSL 1.0.2 или более поздней версии (например, Ubuntu 16.04 или более поздней версии)
- Требуемая версия .NET Framework: .NET Core версии 2.2 или более поздней
- Подключение с поддержкой согласования протокола уровня приложений (ALPN).
- Подключение TLS 1.2 или более поздней версии
†HTTP/2 будет поддерживаться для macOS в будущих выпусках. ‡Kestrel имеет ограниченную поддержку HTTP/2 в Windows Server 2012 R2 и Windows 8.1. Поддержка ограничена из-за небольшого числа поддерживаемых комплектов шифров TLS, доступных для этих операционных систем. Для обеспечения безопасности TLS-подключений может потребоваться сертификат, созданный с использованием алгоритма ECDSA.
Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/2
.
Начиная с версии .NET Core 3.0 протокол HTTP/2 по умолчанию включен. Дополнительные сведения о конфигурации см. в разделах, посвященных ограничениям HTTP/2 в Kestrel и ListenOptions.Protocols.
Расширенные возможности HTTP/2
Дополнительные возможности HTTP/2 в Kestrel поддерживают gRPC, включая трейлеры ответов и отправку кадров сброса.
Трейлеры
Трейлеры 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