použití HTTP/2 s ASP.NET Core Kestrel webovým serverem
HTTP/2 je k dispozici pro ASP.NET Core aplikace, pokud jsou splněné následující základní požadavky:
- Operační systém†
- Windows Server 2016/Windows 10 nebo novější‡
- Linux s OpenSSL 1.0.2 nebo novějším (například Ubuntu 16,04 nebo novější)
- Cílová architektura: .NET Core 2,2 nebo novější
- Připojení ALPN (Application-Layer Protocol Negotiation)
- Připojení TLS 1,2 nebo novější
†HTTP/2 se v budoucí verzi podporuje v macOS. ‡Kestrelmá omezená podpora HTTP/2 v Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS, které jsou k dispozici v těchto operačních systémech, je omezený. Pro zabezpečení připojení TLS může být vyžadován certifikát vygenerovaný pomocí algoritmu ECDSA (s připojením typu eliptická křivka).
Pokud je vytvořeno připojení HTTP/2, sestavy HttpRequest. Protocol HTTP/2 .
Od .NET Core 3,0 je protokol HTTP/2 ve výchozím nastavení povolený. Další informace o konfiguraci najdete v částech Kestrel omezení http/2 a ListenOptions. Protocols .
Rozšířené funkce protokolu HTTP/2
Další funkce HTTP/2 v nástroji Kestrel podporují gRPC, včetně podpory pro přívěsy odpovědí a odesílání snímků pro resetování.
Karoseri
Hlavičky HTTP se podobají hlavičkám HTTP s tím rozdílem, že se odesílaly po odeslání textu odpovědi. Pro IIS a HTTP.sys se podporují pouze hlavičky s 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 příkladu kódu:
SupportsTrailerszajišťuje, že odpověď podporuje upoutávky.DeclareTrailerpřidá do hlavičky odpovědi danýTrailernázev hlavičky. Deklarování upoutávky odpovědi je volitelné, ale doporučuje se. PokudDeclareTrailerje volána, musí být před odesláním hlaviček odpovědi.AppendTrailerpřipojí upoutávku.
Resetovat
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.