Udostępnij za pośrednictwem


Kestrel: protokół HTTP/2 wyłączony za pośrednictwem protokołu TLS w niezgodnych wersjach systemu Windows

Aby włączyć protokół HTTP/2 za pośrednictwem protokołu Transport Layer Security (TLS) w systemie Windows, należy spełnić dwa wymagania:

  • Obsługa negocjacji protokołu warstwy aplikacji (ALPN), która jest dostępna od systemów Windows 8.1 i Windows Server 2012 R2.
  • Zestaw szyfrów zgodnych z protokołem HTTP/2, który jest dostępny od systemu Windows 10 i Windows Server 2016.

W związku z tym zachowanie Kestrel po skonfigurowaniu protokołu HTTP/2 za pośrednictwem protokołu TLS zostało zmienione na:

  • Obniż poziom do Http1 i zarejestruj komunikat na Information poziomie, gdy parametr ListenOptions.HttpProtocols jest ustawiony na Http1AndHttp2wartość . Http1AndHttp2jest wartością domyślną dla .ListenOptions.HttpProtocols
  • Wyrzuć wartość NotSupportedException , gdy ListenOptions.HttpProtocols jest ustawiona na Http2.

Aby zapoznać się z dyskusją, zobacz problem dotnet/aspnetcore#23068.

Wprowadzona wersja

ASP.NET Core 5.0

Stare zachowanie

W poniższej tabeli opisano zachowanie podczas konfigurowania protokołu HTTP/2 za pośrednictwem protokołu TLS.

Protokoły Windows 7,
Windows Server 2008 R2,
lub starsze
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
lub nowsze
Http2 Rzucać NotSupportedException Błąd podczas uzgadniania protokołu TLS Błąd podczas uzgadniania protokołu TLS * Brak błędów
Http1AndHttp2 Obniżanie do Http1 Obniżanie do Http1 Błąd podczas uzgadniania protokołu TLS * Brak błędów

* Skonfiguruj zgodne zestawy szyfrowania, aby włączyć te scenariusze.

Nowe zachowanie

W poniższej tabeli opisano zachowanie podczas konfigurowania protokołu HTTP/2 za pośrednictwem protokołu TLS.

Protokoły Windows 7,
Windows Server 2008 R2,
lub starsze
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
lub nowsze
Http2 Rzucać NotSupportedException Rzucać NotSupportedException Rzucać NotSupportedException ** Brak błędów
Http1AndHttp2 Obniżanie do Http1 Obniżanie do Http1 Obniżanie do Http1 ** Brak błędów

** Skonfiguruj zgodne zestawy szyfrowania i ustaw przełącznik Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 kontekstu aplikacji, aby true włączyć te scenariusze.

Przyczyna wprowadzenia zmiany

Ta zmiana zapewnia, że błędy zgodności protokołu HTTP/2 za pośrednictwem protokołu TLS w starszych wersjach systemu Windows są widoczne tak szybko, jak to możliwe.

Upewnij się, że protokół HTTP/2 za pośrednictwem protokołu TLS jest wyłączony w niezgodnych wersjach systemu Windows. Systemy Windows 8.1 i Windows Server 2012 R2 są niezgodne, ponieważ domyślnie nie mają niezbędnych szyfrów. Można jednak zaktualizować ustawienia konfiguracji komputera w celu używania szyfrowania HTTP/2. Aby uzyskać więcej informacji, zobacz Zestawy szyfrowania TLS w systemie Windows 8.1. Po skonfigurowaniu protokół HTTP/2 za pośrednictwem protokołu TLS w usłudze Kestrel musi być włączony przez ustawienie przełącznika Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2kontekstu aplikacji. Na przykład:

AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);

Żadna podstawowa obsługa nie uległa zmianie. Na przykład protokół HTTP/2 za pośrednictwem protokołu TLS nigdy nie działał w systemie Windows 8 lub Windows Server 2012. Ta zmiana modyfikuje sposób prezentowania błędów w tych nieobsługiwanych scenariuszach.

Dotyczy interfejsów API

Brak