Używanie protokołu HTTP/2 z serwerem internetowym platformy ASP.NET Core Kestrel
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Ostrzeżenie
Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz .NET i .NET Core Support Policy (Zasady obsługi platformy .NET Core). Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Protokół HTTP/2 jest dostępny dla aplikacji ASP.NET Core, jeśli spełnione są następujące podstawowe wymagania:
- System operacyjny
- Windows Server 2016/Windows 10 lub nowszy*
- Linux z biblioteką OpenSSL w wersji 1.0.2 lub nowszej (na przykład Ubuntu 16.04 lub nowszy)
- system macOS 10.15 lub nowszy
- Platforma docelowa: .NET Core 2.2 lub nowsza
- Połączenie negocjowania protokołu warstwy aplikacji (ALPN)
- Połączenie TLS 1.2 lub nowsze
‹Kestrel ma ograniczoną obsługę protokołu HTTP/2 w systemach Windows Server 2012 R2 i Windows 8.1. Obsługa jest ograniczona ze względu na ograniczenie listy obsługiwanych zestawów szyfrowania TLS dostępnych w tych systemach operacyjnych. Do zabezpieczenia połączeń TLS może być wymagany certyfikat wygenerowany przy użyciu algorytmu ECDSA (Elliptic Curve Digital Signature Algorithm).
Jeśli połączenie HTTP/2 zostanie nawiązane, httpRequest.Protocol zgłasza HTTP/2
.
Począwszy od platformy .NET Core 3.0, protokół HTTP/2 jest domyślnie włączony. Aby uzyskać więcej informacji na temat konfiguracji, zobacz Kestrel sekcje Limity HTTP/2 i ListenOptions.Protocols .
Zaawansowane funkcje HTTP/2
Dodatkowe funkcje HTTP/2 w Kestrel obsłudze gRPC, w tym obsługę przyczep odpowiedzi i wysyłanie ramek resetowania.
Przyczepy
Przyczepy HTTP są podobne do nagłówków HTTP, z wyjątkiem wysyłanych po wysłaniu treści odpowiedzi. W przypadku usług IIS i HTTP.sys obsługiwane są tylko przyczepy odpowiedzi HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
W poprzednim przykładowym kodzie:
SupportsTrailers
zapewnia, że przyczepy są obsługiwane w odpowiedzi.DeclareTrailer
dodaje daną nazwę przyczepy do nagłówkaTrailer
odpowiedzi. Deklarowanie przyczep odpowiedzi jest opcjonalne, ale zalecane. JeśliDeclareTrailer
jest wywoływana, musi to być przed wysłaniem nagłówków odpowiedzi.AppendTrailer
dołącza przyczepę.
Reset
Resetowanie umożliwia serwerowi zresetowanie żądania HTTP/2 z określonym kodem błędu. Żądanie resetowania jest uznawane za przerwane.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
w poprzednim przykładzie kodu określa kod błędu INTERNAL_ERROR
. Aby uzyskać więcej informacji na temat kodów błędów HTTP/2, odwiedź sekcję kod błędu specyfikacji HTTP/2.
Protokół HTTP/2 jest dostępny dla aplikacji ASP.NET Core, jeśli spełnione są następujące podstawowe wymagania:
- System operacyjny†
- Windows Server 2016/Windows 10 lub nowszy*
- Linux z biblioteką OpenSSL w wersji 1.0.2 lub nowszej (na przykład Ubuntu 16.04 lub nowszy)
- Platforma docelowa: .NET Core 2.2 lub nowsza
- Połączenie negocjowania protokołu warstwy aplikacji (ALPN)
- Połączenie TLS 1.2 lub nowsze
†HTTP/2 będzie obsługiwana w systemie macOS w przyszłej wersji. ‹Kestrel ma ograniczoną obsługę protokołu HTTP/2 w systemach Windows Server 2012 R2 i Windows 8.1. Obsługa jest ograniczona ze względu na ograniczenie listy obsługiwanych zestawów szyfrowania TLS dostępnych w tych systemach operacyjnych. Do zabezpieczenia połączeń TLS może być wymagany certyfikat wygenerowany przy użyciu algorytmu ECDSA (Elliptic Curve Digital Signature Algorithm).
Jeśli połączenie HTTP/2 zostanie nawiązane, httpRequest.Protocol zgłasza HTTP/2
.
Począwszy od platformy .NET Core 3.0, protokół HTTP/2 jest domyślnie włączony. Aby uzyskać więcej informacji na temat konfiguracji, zobacz Kestrel sekcje Limity HTTP/2 i ListenOptions.Protocols .
Zaawansowane funkcje HTTP/2
Dodatkowe funkcje HTTP/2 w Kestrel obsłudze gRPC, w tym obsługę przyczep odpowiedzi i wysyłanie ramek resetowania.
Przyczepy
Przyczepy HTTP są podobne do nagłówków HTTP, z wyjątkiem wysyłanych po wysłaniu treści odpowiedzi. W przypadku usług IIS i HTTP.sys obsługiwane są tylko przyczepy odpowiedzi HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
W poprzednim przykładowym kodzie:
SupportsTrailers
zapewnia, że przyczepy są obsługiwane w odpowiedzi.DeclareTrailer
dodaje daną nazwę przyczepy do nagłówkaTrailer
odpowiedzi. Deklarowanie przyczep odpowiedzi jest opcjonalne, ale zalecane. JeśliDeclareTrailer
jest wywoływana, musi to być przed wysłaniem nagłówków odpowiedzi.AppendTrailer
dołącza przyczepę.
Reset
Resetowanie umożliwia serwerowi zresetowanie żądania HTTP/2 z określonym kodem błędu. Żądanie resetowania jest uznawane za przerwane.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
w poprzednim przykładzie kodu określa kod błędu INTERNAL_ERROR
. Aby uzyskać więcej informacji na temat kodów błędów HTTP/2, odwiedź sekcję kod błędu specyfikacji HTTP/2.
Protokół HTTP/2 jest dostępny dla aplikacji ASP.NET Core, jeśli spełnione są następujące podstawowe wymagania:
- System operacyjny†
- Windows Server 2016/Windows 10 lub nowszy*
- Linux z biblioteką OpenSSL w wersji 1.0.2 lub nowszej (na przykład Ubuntu 16.04 lub nowszy)
- Platforma docelowa: .NET Core 2.2 lub nowsza
- Połączenie negocjowania protokołu warstwy aplikacji (ALPN)
- Połączenie TLS 1.2 lub nowsze
†HTTP/2 będzie obsługiwana w systemie macOS w przyszłej wersji. ‹Kestrel ma ograniczoną obsługę protokołu HTTP/2 w systemach Windows Server 2012 R2 i Windows 8.1. Obsługa jest ograniczona ze względu na ograniczenie listy obsługiwanych zestawów szyfrowania TLS dostępnych w tych systemach operacyjnych. Do zabezpieczenia połączeń TLS może być wymagany certyfikat wygenerowany przy użyciu algorytmu ECDSA (Elliptic Curve Digital Signature Algorithm).
Jeśli połączenie HTTP/2 zostanie nawiązane, httpRequest.Protocol zgłasza HTTP/2
.
Począwszy od platformy .NET Core 3.0, protokół HTTP/2 jest domyślnie włączony. Aby uzyskać więcej informacji na temat konfiguracji, zobacz Kestrel sekcje Limity HTTP/2 i ListenOptions.Protocols .
Zaawansowane funkcje HTTP/2
Dodatkowe funkcje HTTP/2 w Kestrel obsłudze gRPC, w tym obsługę przyczep odpowiedzi i wysyłanie ramek resetowania.
Przyczepy
Przyczepy HTTP są podobne do nagłówków HTTP, z wyjątkiem wysyłanych po wysłaniu treści odpowiedzi. W przypadku usług IIS i HTTP.sys obsługiwane są tylko przyczepy odpowiedzi HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
W poprzednim przykładowym kodzie:
SupportsTrailers
zapewnia, że przyczepy są obsługiwane w odpowiedzi.DeclareTrailer
dodaje daną nazwę przyczepy do nagłówkaTrailer
odpowiedzi. Deklarowanie przyczep odpowiedzi jest opcjonalne, ale zalecane. JeśliDeclareTrailer
jest wywoływana, musi to być przed wysłaniem nagłówków odpowiedzi.AppendTrailer
dołącza przyczepę.
Reset
Resetowanie umożliwia serwerowi zresetowanie żądania HTTP/2 z określonym kodem błędu. Żądanie resetowania jest uznawane za przerwane.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
w poprzednim przykładzie kodu określa kod błędu INTERNAL_ERROR
. Aby uzyskać więcej informacji na temat kodów błędów HTTP/2, odwiedź sekcję kod błędu specyfikacji HTTP/2.