Aracılığıyla paylaş


IIS'de HTTP/2 ile ASP.NET Core kullanma

Tarafından Justin Kotalik

Aşağıdaki IIS dağıtım senaryolarında ASP.NET Core ile birlikte HTTP/2 desteklenir:

HTTP/2 bağlantısı kurulduğunda işlem içi dağıtım için HttpRequest.ProtocolHTTP/2 bildirir. HTTP/2 bağlantısı kurulduğunda işlem dışı dağıtım için HttpRequest.ProtocolHTTP/1.1 bildirir.

İşlem içi ve işlem dışı barındırma modelleri hakkında daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

HTTP/2, HTTPS/TLS bağlantıları için varsayılan olarak etkindir. HTTP/2 bağlantısı kurulamazsa bağlantılar HTTP/1.1'e geri döner. IIS dağıtımlarıyla HTTP/2 yapılandırması hakkında daha fazla bilgi için bkz. IIS üzerinde HTTP/2.

gRPC'yi desteklemek için gelişmiş HTTP/2 özellikleri

IIS'deki ek HTTP/2 özellikleri, yanıt fragmanları ve sıfırlama çerçeveleri gönderme desteği de dahil olmak üzere gRPC'yi destekler.

IIS'de gRPC çalıştırma gereksinimleri:

  • İşlem içi barındırma.
  • Windows 11 Derleme 22000 veya üzeri, Windows Server 2022 Derleme 20348 veya üzeri.
  • TLS 1.2 veya üzeri bağlantı.

Römork

HTTP Fragmanları HTTP Üst Bilgilerine benzer, ancak yanıt gövdesi gönderildikten sonra gönderilir. IIS ve HTTP.sys için yalnızca HTTP/2 yanıt fragmanları desteklenir.

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

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

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

Yukarıdaki örnek kodda:

  • SupportsTrailers , römorkların yanıt için desteklendiğini güvence altına alır.
  • DeclareTrailer verilen römork adını yanıt üst bilgisine Trailer ekler. Yanıtın fragmanlarının bildirilmesi isteğe bağlıdır ancak önerilir. çağrılırsa DeclareTrailer , yanıt üst bilgileri gönderilmeden önce olmalıdır.
  • AppendTrailer römorku ekler.

Reset

Sıfırlama, sunucunun belirtilen hata koduyla bir HTTP/2 isteğini sıfırlamasına olanak tanır. Sıfırlama isteğinin durduruldu olarak kabul edilir.

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

Reset yukarıdaki kod örneğinde hata kodunu belirtir INTERNAL_ERROR . HTTP/2 hata kodları hakkında daha fazla bilgi için HTTP/2 belirtimi hata kodu bölümünü ziyaret edin.