Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 10 deste artigo.
HTTP/3 é um padrão aprovado e a terceira versão principal do HTTP. Este artigo discute os requisitos para HTTP/3. HTTP/3 é totalmente suportado no .NET 7 ou posterior.
Importante
Os aplicativos configurados para aproveitar o HTTP/3 devem ser projetados para também suportar HTTP/1.1 e HTTP/2.
Benefícios do HTTP/3
HTTP/3:
- É a versão mais recente do Protocolo de Transferência de Hipertexto.
- Baseia-se nos pontos fortes de
HTTP/2ao mesmo tempo em que aborda algumas de suas limitações, particularmente em termos de desempenho, latência, confiabilidade e segurança.
| Característica | HTTP/2 |
HTTP/3 |
|---|---|---|
| Transportes | Usa TCP | Utiliza QUIC |
| Conexão | Mais lento devido a TCP + TLS | Mais rápido com 0-RTT QUIC |
| Configuração | handshake | apertos de mão |
| Cabeça de fila | Afetado pelo nível TCP | Eliminado com QUIC |
| Bloqueio | bloqueio | multiplexação de fluxo |
| Encriptação | TLS sobre TCP | O TLS está integrado no QUIC |
As principais diferenças de HTTP/2 para HTTP/3 são:
-
Protocolo de transporte:
HTTP/3usa QUIC em vez de TCP. O QUIC oferece melhor desempenho, menor latência e melhor confiabilidade, especialmente em redes móveis e com perdas. -
Bloqueio de Cabeceira de Linha:
HTTP/2pode sofrer bloqueio de cabeceira de linha ao nível do TCP, onde um atraso numa transmissão pode afetar outras.HTTP/3, com QUIC, fornece fluxos independentes, para que a perda de pacotes em um fluxo não paralise outros. -
Estabelecimento de conexão:
HTTP/3com o QUIC pode estabelecer conexões mais rápidas, às vezes em tempo zero de ida e volta (0-RTT) para clientes que retornam, pois combina handshakes de transporte e criptografia. -
Criptografia:
HTTP/3exige criptografia TLS 1.3, fornecendo segurança aprimorada por padrão, enquanto é opcional noHTTP/2. -
Multiplexação: Embora ambos sistemas suportem multiplexação, a implementação de
HTTP/3com QUIC é mais eficiente e evita os problemas de bloqueio de linha de frente no nível TCP. -
Migração de conexão: o QUIC in
HTTP/3permite que as conexões persistam mesmo quando o endereço IP de um cliente muda (como mudar de Wi-Fi para celular), melhorando a experiência do usuário móvel.
Requisitos HTTP/3
HTTP/3 usa QUIC como seu protocolo de transporte. A implementação ASP.NET Core do HTTP/3 depende do MsQuic para fornecer a funcionalidade QUIC. Como resultado, ASP.NET suporte Core de HTTP/3 depende dos requisitos da plataforma MsQuic. Para obter mais informações sobre como instalar o MsQuic, consulte Dependências da plataforma QUIC. Se a plataforma em execução Kestrel não tiver todos os requisitos para HTTP/3, ela será desativada e Kestrel voltará para outros protocolos HTTP.
Como Começar
HTTP/3 não está habilitado por padrão. Adicione uma configuração em Program.cs para habilitar HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
O código anterior configura a porta 5001 para:
- Use HTTP/3 ao lado de HTTP/1.1 e HTTP/2 especificando
HttpProtocols.Http1AndHttp2AndHttp3. - Habilite o HTTPS com
UseHttps. HTTP/3 requer HTTPS.
Como nem todos os roteadores, firewalls e proxies suportam HTTP/3 corretamente, HTTP/3 deve ser configurado junto com HTTP/1.1 e HTTP/2. Isso pode ser feito especificando HttpProtocols.Http1AndHttp2AndHttp3 como os protocolos suportados de um ponto de extremidade.
Para obter mais informações, consulte Configurar endpoints para o servidor Web ASP.NET Core Kestrel.
Configurar QuicTransportOptions
As opções de transporte QUIC podem ser configuradas ao chamar o método de extensão UseQuic sobre IWebHostBuilder.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseQuic(options =>
{
#pragma warning disable CA2252 // Using preview features
options.MaxBidirectionalStreamCount = 200;
#pragma warning restore CA2252
});
builder.WebHost.ConfigureKestrel((context, serverOptions) =>
{
serverOptions.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
A tabela seguinte descreve os disponíveis QuicTransportOptions.
| Opção | Predefinido | Description |
|---|---|---|
| MaxBidirectionalStreamCount | 100 |
O número máximo de fluxos bidirecionais concorrentes por ligação. |
| MaxUnidirectionalStreamCount | 10 |
O número máximo de fluxos unidirecionais de entrada concorrentes por ligação. |
| MaxReadBufferSize |
1024 * 1024 (1 MB) |
O tamanho máximo do buffer de leitura em bytes. |
| MaxWriteBufferSize |
64 * 1024 (64 KB) |
O tamanho máximo do buffer de escrita em bytes. |
| Backlog | 512 |
O comprimento máximo da fila de ligação pendente. |
| DefaultStreamErrorCode |
0x010c (SOLICITAÇÃO_CANCELADA_H3) |
Código de erro usado quando o fluxo deve abortar internamente o lado de leitura ou escrita do fluxo. |
| DefaultCloseErrorCode |
0x100 (H3_NO_ERROR) |
Código de erro usado quando uma ligação aberta é eliminada. |
Alt-svc
HTTP/3 é descoberto como uma atualização de HTTP/1.1 ou HTTP/2 através do alt-svc cabeçalho. Isso significa que a primeira solicitação normalmente usará HTTP/1.1 ou HTTP/2 antes de mudar para HTTP/3.
Kestrel adiciona automaticamente o cabeçalho alt-svc se HTTP/3 estiver ativado.
Teste de host local
Os navegadores não permitem certificados autoassinados em HTTP/3, como o certificado de Kestrel desenvolvimento.
HttpClientpode ser usado para teste localhost/loopback no .NET 6 ou posterior. É necessária uma configuração extra ao usarHttpClientpara fazer uma solicitação HTTP/3:- Defina
HttpRequestMessage.Versionpara 3.0, ou - Defina
HttpRequestMessage.VersionPolicycomoHttpVersionPolicy.RequestVersionOrHigher.
- Defina
Para obter mais informações sobre como usar HTTP/3 com HttpClient, consulte HTTP/3 com .NET.
HTTP/3 é um padrão proposto e a terceira versão principal do HTTP. Este artigo discute os requisitos para HTTP/3. HTTP/3 é totalmente suportado no .NET 7 ou posterior.
Importante
Os aplicativos configurados para aproveitar o HTTP/3 devem ser projetados para também suportar HTTP/1.1 e HTTP/2.
Requisitos HTTP/3
HTTP/3 tem requisitos diferentes dependendo do sistema operacional. Se a plataforma em execução Kestrel não tiver todos os requisitos para HTTP/3, ela será desativada e Kestrel retornará para outros protocolos HTTP.
Mac OS
- Windows 11 Build 22000 ou posterior OU Windows Server 2022.
- Conexão TLS 1.3 ou posterior.
Aplicações Linux
-
libmsquicpacote instalado.
libmsquic é publicado através do repositório oficial de pacotes Linux da Microsoft em packages.microsoft.com. Para instalar este pacote:
- Adicione o
packages.microsoft.comrepositório. Consulte Linux Software Repository for Microsoft Products para obter instruções. - Instale o
libmsquicpacote usando o gerenciador de pacotes da distro. Por exemplo,apt install libmsquic=1.9*no Ubuntu.
Nota: O .NET 6 só é compatível com as versões 1.9.x da libmsquic. Libmsquic 2.x não é compatível devido a alterações incompatíveis. O Libmsquic recebe atualizações para 1.9.x quando necessário para incorporar correções de segurança.
macOS
HTTP/3 não é suportado atualmente no macOS e pode estar disponível em uma versão futura.
Como Começar
HTTP/3 não está habilitado por padrão. Adicione uma configuração em Program.cs para habilitar HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
O código anterior configura a porta 5001 para:
- Use HTTP/3 ao lado de HTTP/1.1 e HTTP/2 especificando
HttpProtocols.Http1AndHttp2AndHttp3. - Habilite o HTTPS com
UseHttps. HTTP/3 requer HTTPS.
Como nem todos os roteadores, firewalls e proxies suportam HTTP/3 corretamente, HTTP/3 deve ser configurado junto com HTTP/1.1 e HTTP/2. Isso pode ser feito especificando HttpProtocols.Http1AndHttp2AndHttp3 como os protocolos suportados de um ponto de extremidade.
Para obter mais informações, consulte Configurar endpoints para o servidor Web ASP.NET Core Kestrel.
Alt-svc
HTTP/3 é descoberto como uma atualização de HTTP/1.1 ou HTTP/2 através do alt-svc cabeçalho. Isso significa que a primeira solicitação normalmente usará HTTP/1.1 ou HTTP/2 antes de mudar para HTTP/3.
Kestrel adiciona automaticamente o cabeçalho alt-svc se HTTP/3 estiver ativado.
Teste de host local
Os navegadores não permitem certificados autoassinados em HTTP/3, como o certificado de Kestrel desenvolvimento.
HttpClientpode ser usado para teste localhost/loopback no .NET 6 ou posterior. É necessária uma configuração extra ao usarHttpClientpara fazer uma solicitação HTTP/3:- Defina
HttpRequestMessage.Versionpara 3.0, ou - Defina
HttpRequestMessage.VersionPolicycomoHttpVersionPolicy.RequestVersionOrHigher.
- Defina
Benefícios do HTTP/3
HTTP/3 usa a mesma semântica que HTTP/1.1 e HTTP/2: os mesmos métodos de solicitação, códigos de status e campos de mensagem se aplicam a todas as versões. As diferenças estão no transporte subjacente. Tanto o HTTP/1.1 quanto o HTTP/2 usam TCP como transporte. HTTP/3 usa uma nova tecnologia de transporte desenvolvida juntamente com HTTP/3 chamada QUIC.
HTTP/3 e QUIC têm uma série de benefícios em comparação com HTTP/1.1 e HTTP/2:
- Tempo de resposta mais rápido do primeiro pedido. QUIC e HTTP/3 negociam a conexão em menos viagens de ida e volta entre o cliente e o servidor. A primeira solicitação chega ao servidor mais rapidamente.
- Experiência melhorada quando há perda de pacotes de ligação. HTTP/2 multiplexa várias solicitações através de uma conexão TCP. A perda de pacotes na conexão afeta todas as solicitações. Este problema é chamado de "bloqueio de cabeça de linha". Como o QUIC fornece multiplexação nativa, os pacotes perdidos afetam apenas as solicitações em que os dados foram perdidos.
- Suporta a transição entre redes. Este recurso é útil para dispositivos móveis onde é comum alternar entre Wi-Fi e redes celulares como um dispositivo móvel muda de local. Atualmente, as conexões HTTP/1.1 e HTTP/2 falham com um erro ao alternar redes. Um aplicativo ou navegador da Web deve repetir todas as solicitações HTTP com falha. O HTTP/3 permite que o aplicativo ou navegador da Web continue sem problemas quando uma rede muda. Kestrel não suporta transições de rede no .NET 6. Ele pode estar disponível em uma versão futura.
HTTP/3 é a terceira e próxima versão principal do HTTP. Este artigo discute os requisitos para HTTP/3 e como configurá-lo Kestrel para usá-lo.
Importante
HTTP/3 está disponível no .NET 6 como um recurso de visualização. A especificação HTTP/3 não está finalizada e problemas comportamentais ou de desempenho podem existir no HTTP/3 com .NET 6.
Para obter mais informações sobre o suporte a recursos de visualização, consulte a seção Recursos de visualização suportados.
Os aplicativos configurados para aproveitar o HTTP/3 devem ser projetados para também suportar HTTP/1.1 e HTTP/2. Se os problemas forem identificados no HTTP/3, recomendamos desativar o HTTP/3 até que os problemas sejam resolvidos em uma versão futura do ASP.NET Core. Problemas significativos são relatados no repositório GitHub de Anúncios.
Requisitos HTTP/3
HTTP/3 tem requisitos diferentes dependendo do sistema operacional. Se a plataforma em execução Kestrel não tiver todos os requisitos para HTTP/3, ela será desativada e Kestrel retornará para outros protocolos HTTP.
Mac OS
- Windows 11 Build 22000 ou posterior OU Windows Server 2022.
- Conexão TLS 1.3 ou posterior.
Aplicações Linux
-
libmsquicpacote instalado.
libmsquic é publicado através do repositório oficial de pacotes Linux da Microsoft em packages.microsoft.com. Para instalar este pacote:
- Adicione o
packages.microsoft.comrepositório. Consulte Linux Software Repository for Microsoft Products para obter instruções. - Instale o
libmsquicpacote usando o gerenciador de pacotes da distro. Por exemplo,apt install libmsquic=1.9*no Ubuntu.
Nota: O .NET 6 só é compatível com as versões 1.9.x da libmsquic. Libmsquic 2.x não é compatível devido a alterações incompatíveis. O Libmsquic recebe atualizações para 1.9.x quando necessário para incorporar correções de segurança.
macOS
HTTP/3 não é suportado atualmente no macOS e pode estar disponível em uma versão futura.
Como Começar
HTTP/3 não está habilitado por padrão. Adicione uma configuração em Program.cs para habilitar HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
O código anterior configura a porta 5001 para:
- Use HTTP/3 ao lado de HTTP/1.1 e HTTP/2 especificando
HttpProtocols.Http1AndHttp2AndHttp3. - Habilite o HTTPS com
UseHttps. HTTP/3 requer HTTPS.
Como nem todos os roteadores, firewalls e proxies suportam HTTP/3 corretamente, HTTP/3 deve ser configurado junto com HTTP/1.1 e HTTP/2. Isso pode ser feito especificando HttpProtocols.Http1AndHttp2AndHttp3 como os protocolos suportados de um ponto de extremidade.
Para obter mais informações, consulte Configurar endpoints para o servidor Web ASP.NET Core Kestrel.
Alt-svc
HTTP/3 é descoberto como uma atualização de HTTP/1.1 ou HTTP/2 através do alt-svc cabeçalho. Isso significa que a primeira solicitação normalmente usará HTTP/1.1 ou HTTP/2 antes de mudar para HTTP/3.
Kestrel adiciona automaticamente o cabeçalho alt-svc se HTTP/3 estiver ativado.
Teste de host local
Os navegadores não permitem certificados autoassinados em HTTP/3, como o certificado de Kestrel desenvolvimento.
HttpClientpode ser usado para teste localhost/loopback no .NET 6 ou posterior. É necessária uma configuração extra ao usarHttpClientpara fazer uma solicitação HTTP/3:- Defina
HttpRequestMessage.Versionpara 3.0, ou - Defina
HttpRequestMessage.VersionPolicycomoHttpVersionPolicy.RequestVersionOrHigher.
- Defina
Limitações
Alguns cenários HTTPS ainda não são suportados para HTTP/3 no Kestrel. Ao ligar Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps com HttpsConnectionAdapterOptions enquanto usa HTTP/3, definir as seguintes opções no HttpsConnectionAdapterOptions é um no-op (ele não faz nada):
Chamar as seguintes implementações de Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps resulta em um erro ao usar HTTP/3:
- UseHttps(este ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout)
- UseHttps(este ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
Benefícios do HTTP/3
HTTP/3 usa a mesma semântica que HTTP/1.1 e HTTP/2: os mesmos métodos de solicitação, códigos de status e campos de mensagem se aplicam a todas as versões. As diferenças estão no transporte subjacente. Tanto o HTTP/1.1 quanto o HTTP/2 usam TCP como transporte. HTTP/3 usa uma nova tecnologia de transporte desenvolvida juntamente com HTTP/3 chamada QUIC.
HTTP/3 e QUIC têm uma série de benefícios em comparação com HTTP/1.1 e HTTP/2:
- Tempo de resposta mais rápido do primeiro pedido. QUIC e HTTP/3 negociam a conexão em menos viagens de ida e volta entre o cliente e o servidor. A primeira solicitação chega ao servidor mais rapidamente.
- Experiência melhorada quando há perda de pacotes de ligação. HTTP/2 multiplexa várias solicitações através de uma conexão TCP. A perda de pacotes na conexão afeta todas as solicitações. Este problema é chamado de "bloqueio de cabeça de linha". Como o QUIC fornece multiplexação nativa, os pacotes perdidos afetam apenas as solicitações em que os dados foram perdidos.
- Suporta a transição entre redes. Este recurso é útil para dispositivos móveis onde é comum alternar entre Wi-Fi e redes celulares como um dispositivo móvel muda de local. Atualmente, as conexões HTTP/1.1 e HTTP/2 falham com um erro ao alternar redes. Um aplicativo ou navegador da Web deve repetir todas as solicitações HTTP com falha. O HTTP/3 permite que o aplicativo ou navegador da Web continue sem problemas quando uma rede muda. Kestrel não suporta transições de rede no .NET 6. Ele pode estar disponível em uma versão futura.