Använda ASP.NET Core med HTTP/2 på IIS

Anmärkning

Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i .NET 10-versionen av den här artikeln.

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Av Justin Kotalik

HTTP/2 stöds med ASP.NET Core i följande IIS-distributionsscenarier:

  • Windows Server 2016 eller senare/Windows 10 eller senare
  • IIS 10 eller senare
  • TLS 1.2 eller senare anslutning
  • När värdtjänsten är out-of-process: Anslutningar till offentliga gränsservrar använder HTTP/2, men proxyanslutningen till servern använder HTTP/1.1.

För en pågående distribution, när en HTTP/2-anslutning upprättas, HttpRequest.Protocol rapporterar HTTP/2. För en distribution utanför processen när en HTTP/2-anslutning upprättas rapporterar HttpRequest.ProtocolHTTP/1.1.

Mer information om in-process- och out-of-process-värdmodeller finns i ASP.NET Core Module (ANCM) för IIS.

HTTP/2 är aktiverat som standard för HTTPS/TLS-anslutningar. Anslutningarna återgår till HTTP/1.1 om en HTTP/2-anslutning inte har upprättats. Mer information om HTTP/2-konfiguration med IIS-distributioner finns i HTTP/2 på IIS.

Avancerade HTTP/2-funktioner för att stödja gRPC

Ytterligare HTTP/2-funktioner i IIS stöder gRPC, inklusive stöd för svarstrailer och sändning av återställningsramar.

Krav för att köra gRPC på IIS:

  • In-process värdtjänst.
  • Windows 11 Build 22000 eller senare, Windows Server 2022 Build 20348 eller senare.
  • TLS 1.2 eller senare anslutning.

Filmtrailers

HTTP-trailers liknar HTTP-huvuden, förutom att de skickas efter att svarstexten har skickats. För IIS och HTTP.sysstöds endast HTTP/2-svarstrailer.

if (httpContext.Response.SupportsTrailers())
{
    httpContext.Response.DeclareTrailer("trailername");	

    // Write body
    httpContext.Response.WriteAsync("Hello world");

    httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}

I föregående exempelkod:

  • SupportsTrailers ser till att släpvagnar stöds för svaret.
  • DeclareTrailer lägger till det angivna trailernamnet i Trailer-svarsrubriken. Att deklarera ett svars släpvagnar är valfritt, men rekommenderas. Om DeclareTrailer anropas måste det vara innan svarsrubrikerna skickas.
  • AppendTrailer lägger till släpfilen.

Återställ

Med återställning kan servern återställa en HTTP/2-begäran med en angiven felkod. En återställningsbegäran anses avbruten.

var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);

Reset i föregående kodexempel anger INTERNAL_ERROR felkod. Mer information om HTTP/2-felkoder finns i avsnittet HTTP/2-specifikationsfelkod.