Używanie ASP.NET Core z protokołem HTTP/2 w usługach IIS
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
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ą, zobacz wersję tego artykułu platformy .NET 9.
Autor: Justin Kotalik
Protokół HTTP/2 jest obsługiwany w przypadku ASP.NET Core w następujących scenariuszach wdrażania usług IIS:
- Windows Server 2016 lub nowszy / Windows 10 lub nowszy
- Usługi IIS 10 lub nowsze
- Połączenie TLS 1.2 lub nowsze
- W przypadku hostowania poza procesem: połączenia z serwerem brzegowym dostępnym publicznie używają protokołu HTTP/2, ale odwrotne połączenie serwera proxy z Kestrel serwerem korzysta z protokołu HTTP/1.1.
W przypadku wdrożenia wewnątrz procesu po nawiązaniu połączenia HTTP/2 HttpRequest.Protocol
zgłasza HTTP/2
. W przypadku wdrożenia poza procesem podczas nawiązywania połączenia HTTP/2 HttpRequest.Protocol
zgłasza HTTP/1.1
.
Aby uzyskać więcej informacji na temat modeli hostingu wewnątrz procesu i poza procesem, zobacz Moduł ASP.NET Core Module (ANCM) dla usług IIS.
Protokół HTTP/2 jest domyślnie włączony dla połączeń HTTPS/TLS. Połączenia wracają do używania protokołu HTTP/1.1, jeśli połączenie HTTP/2 nie zostało nawiązane. Aby uzyskać więcej informacji na temat konfiguracji protokołu HTTP/2 z wdrożeniami usług IIS, zobacz HTTP/2 w usługach IIS.
Zaawansowane funkcje HTTP/2 do obsługi gRPC
Dodatkowe funkcje HTTP/2 w usługach IIS obsługują gRPC, w tym obsługę przyczep odpowiedzi i wysyłanie ramek resetowania.
Wymagania dotyczące uruchamiania usługi gRPC w usługach IIS:
- Hosting w procesie.
- Windows 11 Build 22000 lub nowszy, Windows Server 2022 Build 20348 lub nowszy.
- Połączenie TLS 1.2 lub nowsze.
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.