Usar o 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 9 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, confira .NET e a Política de Suporte do .NET Core. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Importante
Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.
Para a versão atual, consulte a versão .NET 9 deste artigo.
O HTTP/2 é compatível com ASP.NET Core nos seguintes cenários de implantação de IIS:
- Windows Server 2016 ou posteriores / Windows 10 ou posteriores
- IIS 10 ou posterior
- Conexão TLS 1.2 ou posterior
- Ao hospedar fora de processo: conexões de servidor de borda voltadas para o público usam HTTP/2, mas a conexão de proxy reverso para o Kestrel servidor usa HTTP/1.1.
Para uma implantação em processo quando uma conexão HTTP/2 for estabelecida, o HttpRequest.Protocol
relatará HTTP/2
. Para uma implantação fora do processo quando uma conexão HTTP/2 for estabelecida, o HttpRequest.Protocol
relatará HTTP/1.1
.
Para saber mais sobre os modelos de hospedagem dentro e fora do processo, consulte Módulo do ASP.NET Core (ANCM) para IIS.
O HTTP/2 está habilitado por padrão para conexões HTTPS/TLS. As conexões retornarão para HTTP/1.1 se uma conexão HTTP/2 não for estabelecida. Para obter mais informações sobre a configuração de HTTP/2 com implantações do IIS, consulte HTTP/2 no IIS.
Recursos HTTP/2 avançados para dar suporte a gRPC
Os recursos HTTP/2 adicionais no IIS dão suporte a gRPC, incluindo suporte para trailers de resposta e envio de quadros de redefinição.
Requisitos para executar gRPC no IIS:
- Hospedagem em processo.
- Windows 11 Build 22000 ou posterior, Windows Server 2022 Build 20348 ou posterior.
- Conexão TLS 1.2 ou posterior.
Trailers
Os trailers HTTP são semelhantes aos cabeçalhos HTTP, exceto por serem enviados após o corpo da resposta ser enviado. Para IIS e HTTP.sys, há suporte apenas para trailers de resposta HTTP/2.
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 trailers sejam compatíveis com a resposta.DeclareTrailer
adiciona o nome do trailer fornecido ao cabeçalho de respostaTrailer
. Declarar os trailers de uma resposta é opcional, mas recomendado. SeDeclareTrailer
for chamado, deverá ser antes que os cabeçalhos de resposta sejam enviados.- O
AppendTrailer
acrescenta o trailer.
Redefinir
A opção Redefinir permite que o servidor redefina uma solicitação HTTP/2 com um código de erro especificado. Uma solicitação de redefinição é considerada anulada.
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 de código de erro de especificação HTTP/2.