Partilhar via


Usa ASP.NET Core com HTTP/2 no IIS

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.

Advertência

Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.

Por Justin Kotalik

O HTTP/2 é suportado com ASP.NET Core nos seguintes cenários de implementação do IIS:

  • Windows Server 2016 ou posterior / Windows 10 ou posterior
  • IIS 10 ou posterior
  • Conexão TLS 1.2 ou posterior
  • Quando hospedagem fora de processo: As ligações públicas de servidor de borda usam HTTP/2, mas a ligação proxy reversa Kestrel ao servidor usa HTTP/1.1.

Durante uma implementação em andamento, quando uma ligação HTTP/2 é estabelecida, HttpRequest.Protocol reporta HTTP/2. Para uma implementação fora do processo, quando uma ligação HTTP/2 é estabelecida, HttpRequest.Protocol reporta HTTP/1.1.

Para mais informações sobre os modelos de alojamento em processo e fora de processo, consulte ASP.NET Módulo Núcleo (ANCM) para IIS.

O HTTP/2 está ativado por padrão para conexões HTTPS/TLS. As ligações voltam ao HTTP/1.1 se uma ligação HTTP/2 não estiver estabelecida. Para mais informações sobre a configuração HTTP/2 com implantações do IIS, consulte HTTP/2 sobre o IIS.

Recursos avançados de HTTP/2 para suportar gRPC

Funcionalidades HTTP/2 adicionais no IIS suportam gRPC, incluindo suporte para trailers de resposta e envio de quadros de reinicialização.

Requisitos para correr o gRPC no IIS:

  • Alojamento em processo.
  • Windows 11 Build 22000 ou posterior, Windows Server 2022 Build 20348 ou posterior.
  • Conexão TLS 1.2 ou posterior.

Trailers de filmes

Os trailers HTTP são semelhantes aos cabeçalhos HTTP, exceto que são enviados após o corpo da resposta ser enviado. Para o IIS e o HTTP.sys, apenas trailers de resposta HTTP/2 são suportados.

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

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

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

No código de exemplo anterior:

  • SupportsTrailers garante que os reboques são suportados para a resposta.
  • DeclareTrailer adiciona o nome do trailer fornecido ao cabeçalho de resposta Trailer. Declarar os trailers de uma resposta é opcional, mas recomendado. Se DeclareTrailer for chamado, deve ser antes que os cabeçalhos de resposta sejam enviados.
  • AppendTrailer anexa o trailer.

Reiniciar

Reset permite que o servidor redefina uma solicitação HTTP/2 com um código de erro especificado. Um pedido de reinicialização é considerado abortado.

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

Reset no exemplo de código anterior especifica o código de erro INTERNAL_ERROR. Para obter mais informações sobre códigos de erro HTTP/2, visite a seção código de erro de especificação HTTP/2.