Použití ASP.NET Core s HTTP/2 ve službě IIS

Autor: Justin Kotalik

ASP.NET Core podporuje HTTP/2 v následujících scénářích nasazení služby IIS:

  • Windows Server 2016 nebo novější / Windows 10 nebo novější
  • IIS 10 nebo novější
  • Připojení přes protokol TLS 1.2 nebo novější
  • Při hostování out-of-process: Připojení k veřejnému hraničnímu serveru používají http/2, ale reverzní proxy připojení k Kestrel serveru používá HTTP/1.1.

V případě vnitroprocesového nasazení vlastnost HttpRequest.Protocol po navázání připojení HTTP/2 bude obsahovat hodnotu HTTP/2. V případě mimoprocesového nasazení vlastnost HttpRequest.Protocol po navázání připojení HTTP/2 bude obsahovat hodnotu HTTP/1.1.

Další informace o modelech vnitroprocesového a mimoprocesového hostování najdete v tématu Modul ASP.NET Core (ANCM) pro službu IIS.

Protokol HTTP/2 je ve výchozím nastavení povolený pro připojení HTTPS/TLS. Pokud není možné navázat připojení HTTP/2, naváže se připojení HTTP/1.1. Další informace o konfiguraci HTTP/2 v nasazeních služby IIS najdete v tématu HTTP/2 ve službě IIS.

Pokročilé funkce HTTP/2 pro podporu gRPC

Další funkce HTTP/2 ve službě IIS podporují gRPC, včetně podpory pro přívěsy odpovědí a odesílání resetování rámců.

Požadavky na spuštění gRPC ve službě IIS:

  • Hostování v procesu
  • Windows 11 Build 22000 nebo novější, Windows Server 2022 Build 20348 nebo novější.
  • Připojení TLS 1.2 nebo novější

Přívěsy

Přívěsy HTTP se podobají hlavičce HTTP, s výjimkou toho, že se odešlou po odeslání textu odpovědi. Pro SLUŽBU IIS a HTTP.sys jsou podporovány pouze přívěsy odpovědí HTTP/2.

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

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

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

V předchozím ukázkovém kódu:

  • SupportsTrailers zajišťuje, aby byly pro odpověď podporovány přívěsy.
  • DeclareTrailer přidá daný název přívěsu do hlavičky Trailer odpovědi. Deklarování přívěsů odpovědí je volitelné, ale doporučuje se. Pokud DeclareTrailer je volána, musí být před odesláním hlaviček odpovědi.
  • AppendTrailer připojí přívěs.

Reset

Resetování umožňuje serveru resetovat požadavek HTTP/2 se zadaným kódem chyby. Žádost o resetování se považuje za přerušenou.

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

Reset v předchozím příkladu kódu určuje INTERNAL_ERROR kód chyby. Další informace o kódech chyb HTTP/2 najdete v části kód chyby specifikace HTTP/2.