Partilhar via


Kestrel: HTTP/2 desativado sobre TLS em versões incompatíveis do Windows

Para habilitar HTTP/2 sobre Transport Layer Security (TLS) no Windows, dois requisitos precisam ser atendidos:

  • Suporte para a negociação do protocolo Application-Layer (ALPN), que está disponível a partir do Windows 8.1 e Windows Server 2012 R2.
  • Um conjunto de cifras compatíveis com HTTP/2, que está disponível a partir do Windows 10 e do Windows Server 2016.

Como tal, o comportamento do Kestrel quando HTTP/2 sobre TLS está configurado mudou para:

  • Faça downgrade para Http1 e registe uma mensagem no nível Information quando ListenOptions.HttpProtocols estiver definido como Http1AndHttp2. Http1AndHttp2 é o valor padrão para ListenOptions.HttpProtocols.
  • Lançar um NotSupportedException quando ListenOptions.HttpProtocols está definido como Http2.

Para discussão, consulte o tópico dotnet/aspnetcore#23068.

Versão introduzida

ASP.NET Núcleo 5.0

Comportamento antigo

A tabela a seguir descreve o comportamento quando HTTP/2 sobre TLS é configurado.

Protocolos Windows 7
Windows Server 2008 R2,
ou anterior
Windows 8
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10
Windows Server 2016,
ou mais recente
Http2 Lançamento NotSupportedException Erro durante o handshake TLS Erro durante o handshake TLS * Sem erro
Http1AndHttp2 Reduzir para Http1 Reduzir para Http1 Erro durante o handshake TLS * Sem erro

* Configure pacotes de codificação compatíveis para habilitar esses cenários.

Novo comportamento

A tabela a seguir descreve o comportamento quando HTTP/2 sobre TLS é configurado.

Protocolos Windows 7
Windows Server 2008 R2,
ou anterior
Windows 8
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10
Windows Server 2016,
ou mais recente
Http2 Lançamento NotSupportedException Lançamento NotSupportedException Atirar NotSupportedException ** Sem erro
Http1AndHttp2 Reduzir para Http1 Reduzir para Http1 Downgrade para Http1 ** Sem erro

** Configure suites de encriptação compatíveis e defina o comutador de contexto da aplicação Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 para true ativar esses cenários.

Motivo da mudança

Essa alteração garante que erros de compatibilidade para HTTP/2 sobre TLS em versões mais antigas do Windows sejam revelados o mais cedo e claramente possível.

Verifique se o HTTP/2 sobre TLS está desativado em versões incompatíveis do Windows. O Windows 8.1 e o Windows Server 2012 R2 são incompatíveis, uma vez que não possuem as cifras necessárias por padrão. No entanto, é possível atualizar as definições de Configuração do Computador para usar cifras compatíveis com HTTP/2. Para obter mais informações, consulte Pacotes de codificação TLS no Windows 8.1. Uma vez configurado, HTTP/2 sobre TLS no Kestrel deve ser habilitado definindo a opção Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2de contexto do aplicativo. Por exemplo:

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

Nenhum suporte subjacente foi alterado. Por exemplo, HTTP/2 sobre TLS nunca funcionou no Windows 8 ou no Windows Server 2012. Essa alteração modifica como os erros nesses cenários sem suporte são apresentados.

APIs afetadas

Nenhum