O HTTP/3 é a terceira versão principal do protocolo HTTP. Diferentemente do HTTP/1.1 e do HTTP/2, o HTTP/3 não utiliza mais o protocolo TCP tradicional na camada de transporte; em vez disso, adota o protocolo Quick UDP Internet Connection (QUIC), baseado em UDP. Essa mudança proporciona menor latência, recuperação de erros mais robusta e multiplexação de conexões mais eficiente. Este tópico descreve como configurar serviços baseados em HTTP/3 em um gateway ASM.
Informações básicas
O HTTP/3 utiliza QUIC sobre UDP como mecanismo de transporte e, por isso, apresenta as seguintes vantagens em relação ao HTTP/2:
Latência reduzida no handshake: O HTTP/3 usa o recurso 0-RTT do protocolo QUIC para concluir o estabelecimento da conexão (RTT significa round trip time). Além disso, o TLS integra-se ao QUIC para permitir criptografia e handshakes simultâneos, o que reduz significativamente a latência durante o estabelecimento da conexão.
Novo mecanismo de multiplexação: O HTTP/2 sofre com bloqueio de cabeça de linha na camada TCP. Já o HTTP/3 usa o QUIC para multiplexar vários fluxos independentes na mesma conexão. Mesmo que ocorra perda de pacote em um fluxo de dados, a transmissão dos demais fluxos não é bloqueada. Assim, o bloqueio de um único fluxo de dados deixa de afetar o desempenho de transmissão de toda a conexão.
Migração de conexão: O HTTP/3 permite a migração de conexões entre diferentes endereços IP, mesmo quando o ambiente de rede muda, como na alternância de uma rede Wi-Fi para uma rede móvel. Isso garante a continuidade e a estabilidade das conexões.
Segurança: O HTTP/3 exige o uso de TLS 1.3 para transmissão criptografada, garantindo maior segurança e proteção de privacidade.
Os gateways ASM suportam HTTP/3. Use HTTP/3 para acessar serviços expostos em gateways ASM e melhorar o desempenho e a estabilidade do serviço.
Pré-requisitos
Adicione um cluster Container Service for Kubernetes (ACK) à sua instância ASM e verifique se a versão da instância ASM é 1,16 ou posterior. Para mais informações, consulte Adicionar um cluster a uma instância ASM.
Implante um gateway de entrada. Para mais informações, consulte Crie um gateway de entrada.
Implante a aplicação HTTPBin. Para mais informações, consulte Implantar a aplicação HTTPBin.
Verifique se o cluster ACK está na versão 1,24 ou posterior e se o Cloud Controller Manager (CCM) está na versão 2.6.0 ou posterior. Para mais informações, consulte Cloud Controller Manager.
Crie um certificado chamado aliyun.com.cert para sua instância ASM. Para mais informações, consulte Usar o recurso de gerenciamento de certificados do ASM.
Etapa 1: Ative o HTTP/3
Faça login no console ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, escolha .
No canto superior direito da página Base Information, clique em Settings. Na barra lateral expandida, selecione Enable HTTP/3.
Etapa 2: Ative um listener UDP no gateway de entrada ASM
O protocolo QUIC baseia-se em UDP. Portanto, ative um listener UDP no gateway de entrada ASM.
Neste exemplo, modifique a configuração YAML do gateway de entrada ASM para ativar um listener UDP na porta 444.
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
labels:
asm-gateway-type: ingress
name: ingressgateway
namespace: istio-system
spec:
......
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
-name: udp # Enable a UDP listener on port 444.
port: 444
protocol: UDP
targetPort: 444
......
Um gateway ASM suporta listeners TCP e UDP na mesma porta. Por exemplo, adicione um listener UDP na porta 443 para expor serviços HTTPS. Os dois listeners não entram em conflito.
Etapa 3: Configure um gateway Istio
O QUIC impõe comunicação TLS. Portanto, configure um certificado para o gateway Istio. Atualize a configuração do gateway Istio usando o seguinte arquivo YAML:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: httpbin
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*'
port:
name: test
number: 80
protocol: HTTP
- hosts:
- '*'
port:
name: quic
number: 444
protocol: HTTPS
tls:
credentialName: aliyun.com.cert
mode: SIMPLE
Etapa 4: Testar o acesso ao gateway ASM via HTTP/3
O curl é uma ferramenta comum de teste HTTP, mas seus comandos não suportam HTTP/3 por padrão. Execute o comando a seguir para verificar se o curl instalado suporta HTTP/3:
curl --version | grep http3
Se a saída for semelhante ao exemplo abaixo, os comandos curl no ambiente atual suportam HTTP/3.
curl 8.9.0-DEV (aarch64-apple-darwin23.5.0) libcurl/8.9.0-DEV quictls/3.1.4 zlib/1.2.12 libidn2/2.3.7 nghttp2/1.59.0 ngtcp2/1.2.0 nghttp3/1.1.0
Caso nenhuma saída seja exibida, os comandos curl no ambiente atual não suportam HTTP/3. Recompile o curl em uma versão compatível com HTTP/3. Para mais informações, consulte Build with quictls.
Após concluir a compilação, execute o comando a seguir para testar o suporte a HTTP/3:
curl -k --http3-only -H Host:aliyun.com --resolve aliyun.com:444 :${IP address of the ASM gateway} https://aliyun.com:444/headers -v
Saída esperada:
......
* Connected to aliyun.com (xxx.xx.xx.x) port 444
* using HTTP/3
* [HTTP/3] [0] OPENED stream for https://aliyun.com:444/headers
* [HTTP/3] [0] [:method: GET]
* [HTTP/3] [0] [:scheme: https]
* [HTTP/3] [0] [:authority: aliyun.com]
* [HTTP/3] [0] [:path: /headers]
* [HTTP/3] [0] [user-agent: curl/8.9.0-DEV]
* [HTTP/3] [0] [accept: */*]
> GET /headers HTTP/3
> Host:aliyun.com
> User-Agent: curl/8.9.0-DEV
> Accept: */*
>
* Request completely sent off
* old SSL session ID is stale, removing
< HTTP/3 200
< server: istio-envoy
< date: Wed, 26 Jun 2024 07:40:07 GMT
< content-type: application/json
< content-length: 460
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
< alt-svc: h3=":444"; ma=86400
<
{
"headers": {
"Accept": "*/*",
"Host": "aliyun.com",
"Transfer-Encoding": "chunked",
"User-Agent": "curl/8.9.0-DEV",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-External-Address": "xx.xx.xx.xx",
"X-Forwarded-Client-Cert": "xxxxxxx"
}
}
* Connection #0 to host aliyun.com left intact
Referências
Para entender por que o bloqueio de cabeça de linha na camada TCP do HTTP/2 pode ser apenas mitigado, mas não completamente evitado, consulte Hypertext Transfer Protocol Version 2 (HTTP/2).
O HTTP/3 introduz um novo mecanismo de multiplexação que resolve definitivamente o problema de bloqueio de cabeça de linha. A documentação oficial também explica como melhorar o desempenho da conexão evitando esse bloqueio. Para mais informações, consulte QUIC: A UDP-Based Multiplexed and Secure Transport.