Kestrel: HTTP/2 disabilitato su TLS in versioni di Windows incompatibili
Per abilitare HTTP/2 su TLS (Transport Layer Security) in Windows, è necessario soddisfare due requisiti:
- Supporto per ALPN (Application-Layer Protocol Negotiation), disponibile a partire da Windows 8.1 e Windows Server 2012 R2.
- Set di crittografie compatibili con HTTP/2, disponibile a partire da Windows 10 e Windows Server 2016.
Di conseguenza, il comportamento di Kestrel quando è configurato HTTP/2 su TLS è cambiato in:
- Downgrade a
Http1
e registrare un messaggio a livello diInformation
quando ListenOptions.HttpProtocols è impostato suHttp1AndHttp2
.Http1AndHttp2
è il valore predefinito diListenOptions.HttpProtocols
. - Generazione di una
NotSupportedException
quandoListenOptions.HttpProtocols
è impostato suHttp2
.
Per informazioni, vedere il problema dotnet/aspnetcore#23068.
Versione introdotta
ASP.NET Core 5.0
Comportamento precedente
La tabella seguente illustra il comportamento quando è configurato HTTP/2 su TLS.
Protocolli | Windows 7, Windows Server 2008 R2, o versioni precedenti |
Windows 8, Windows Server 2012 |
Windows 8.1, Windows Server 2012 R2 |
Windows 10, Windows Server 2016, o versione successiva |
---|---|---|---|---|
Http2 |
Generazione di NotSupportedException |
Errore durante l'handshake TLS | Errore durante l'handshake TLS * | Nessun errore |
Http1AndHttp2 |
Downgrade a Http1 |
Downgrade a Http1 |
Errore durante l'handshake TLS * | Nessun errore |
* Configurare pacchetti di crittografia compatibili per abilitare questi scenari.
Nuovo comportamento
La tabella seguente illustra il comportamento quando è configurato HTTP/2 su TLS.
Protocolli | Windows 7, Windows Server 2008 R2, o versioni precedenti |
Windows 8, Windows Server 2012 |
Windows 8.1, Windows Server 2012 R2 |
Windows 10, Windows Server 2016, o versione successiva |
---|---|---|---|---|
Http2 |
Generazione di NotSupportedException |
Generazione di NotSupportedException |
Generazione di NotSupportedException ** |
Nessun errore |
Http1AndHttp2 |
Downgrade a Http1 |
Downgrade a Http1 |
Downgrade a Http1 ** |
Nessun errore |
** Configurare pacchetti di crittografia compatibili e impostare l'opzione di contesto dell'app Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
su true
per abilitare questi scenari.
Motivo della modifica
Questa modifica garantisce che gli errori di compatibilità per HTTP/2 su TLS nelle versioni precedenti di Windows vengano visualizzati il prima possibile e il più chiaramente possibile.
Azione consigliata
Verificare che HTTP/2 su TLS sia disabilitato nelle versioni di Windows incompatibili. Windows 8.1 e Windows Server 2012 R2 sono incompatibili perché non hanno le crittografie necessarie per impostazione predefinita. È tuttavia possibile aggiornare le impostazioni di Configurazione computer per usare crittografie compatibili con HTTP/2. Per altre informazioni, vedere Pacchetti di crittografia TLS in Windows 8.1. Dopo la configurazione, HTTP/2 su TLS in Kestrel deve essere abilitato impostando l'opzione di contesto dell'app Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2
. Ad esempio:
AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);
Non è stato modificato alcun supporto sottostante. Ad esempio, HTTP/2 su TLS non ha mai funzionato in Windows 8 o Windows Server 2012. Questa modifica cambia il modo in cui vengono presentati gli errori in questi scenari non supportati.
API interessate
Nessuno