HTTP/3 e QUIC: vale ligar no seu servidor agora?
O protocolo saiu do papel, os navegadores suportam e o nginx implementa. O ganho é real em rede ruim e quase nulo em fibra — o que muda a resposta conforme quem é o seu usuário.
Equipe EasyOps Cloud · · 5 min de leitura
O HTTP/3 deixou de ser assunto de conferência. O QUIC virou padrão em 2021, o HTTP/3 em 2022, os navegadores implementam há anos e o nginx traz suporte desde a série 1.25. A pergunta hoje não é se a tecnologia está pronta — está. É se ela resolve algum problema que você tem.
O que o HTTP/3 é, de fato
Vale começar pelo que não muda: os métodos, os cabeçalhos, os códigos de status e a semântica do HTTP continuam iguais. Sua aplicação não sabe a diferença.
O que muda é o transporte. O HTTP/1.1 e o HTTP/2 correm sobre TCP; o HTTP/3 corre sobre QUIC, que roda sobre UDP e traz a criptografia para dentro do próprio protocolo de transporte. Três consequências práticas:
- Fim do bloqueio de cabeça de fila no transporte. No HTTP/2, várias requisições compartilham uma conexão TCP. Um pacote perdido trava a conexão inteira até a retransmissão chegar — inclusive as requisições que já tinham seus dados. No QUIC, cada fluxo é independente: o pacote perdido segura só o fluxo dele.
- Handshake mais curto. TCP e TLS deixam de ser duas etapas em série; o QUIC faz a conexão criptografada em uma ida e volta, e em zero para um servidor já conhecido.
- Migração de conexão. A conexão é identificada por um número, não pelo par de endereços IP. O celular que sai do Wi-Fi para o 5G mantém a conexão em vez de refazê-la.
TLS 1.3 é obrigatório. Não existe QUIC sem criptografia.
Onde o ganho aparece — e onde não aparece
Esta é a parte que a maioria dos artigos omite: o ganho do HTTP/3 é proporcional à perda de pacote e à latência da rede.
- Aparece muito em rede móvel, Wi-Fi congestionado, conexão instável, usuário geograficamente distante do servidor e qualquer cenário com perda de pacote perceptível.
- Aparece pouco ou nada em fibra estável e de baixa latência, ou quando o cliente está no mesmo país que o servidor com boa rota.
- Não aparece de jeito nenhum se o seu gargalo for outro. Página que demora porque a consulta ao banco leva dois segundos, ou porque a resposta tem 4 MB de JavaScript, não melhora com troca de protocolo de transporte. Nesse caso o caminho é descobrir onde está o gargalo, não trocar o protocolo.
Se o seu público é majoritariamente móvel, ou está espalhado pelo Brasil enquanto o servidor está em um único ponto, o HTTP/3 tende a valer. Se é um painel interno acessado por uma equipe na mesma cidade, o ganho será difícil de medir.
O custo de ligar
É baixo, mas não é zero, e os itens abaixo são exatamente os que costumam ser descobertos depois:
- UDP na porta 443 precisa estar aberto. É o item que mais trava a adoção. Boa parte dos firewalls foi configurada assumindo que 443 é TCP. Se o UDP estiver bloqueado, o navegador tenta, falha e volta silenciosamente para HTTP/2 — você não vê erro nenhum e também não ganha nada. Vale conferir na sua configuração de firewall.
- O HTTP/2 continua obrigatório. O HTTP/3 é anunciado, não imposto: o cliente
chega por TCP, lê o cabeçalho
Alt-Svce só então tenta o UDP. Nenhuma configuração remove a necessidade de manter o caminho antigo funcionando. - CPU. O QUIC processa em espaço de usuário o que o TCP processa no kernel, com otimizações de décadas. Em volume alto, o consumo de CPU por requisição é mensuravelmente maior.
- Observabilidade. Ferramentas de rede maduras entendem TCP muito melhor do que QUIC, e o tráfego é criptografado desde o transporte. Depurar é mais difícil.
- Redes que degradam UDP. Algumas redes corporativas limitam ou priorizam pior o UDP. O navegador se recupera, mas o resultado pode ser pior do que ficar no HTTP/2.
Como habilitar no nginx
A partir da série 1.25, o suporte está no ngx_http_v3_module. Confirme antes:
nginx -V 2>&1 | tr ' ' '\n' | grep -E 'http_v3|nginx/'A configuração mínima, em um servidor que já serve HTTPS:
server {
# o caminho existente, que continua sendo o principal
listen 443 ssl;
http2 on;
# HTTP/3 sobre QUIC
listen 443 quic reuseport;
ssl_certificate /etc/letsencrypt/live/exemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemplo.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# sem isto, nenhum navegador descobre que o HTTP/3 existe
add_header Alt-Svc 'h3=":443"; ma=86400' always;
}Três detalhes que causam boa parte dos problemas:
reuseportvai em um único blocolistenpor porta em toda a configuração. Repetido em váriosserver, o nginx recusa iniciar.Alt-Svcé o que faz tudo funcionar. Sem esse cabeçalho, o servidor fala HTTP/3 e nenhum cliente tenta. Oalwaysgarante o envio também em respostas de erro.- UDP 443 no firewall, no host e em qualquer camada acima dele.
Aplique com validação antes de recarregar — e, se for produção, com um snapshot antes:
sudo nginx -t && sudo systemctl reload nginx
sudo ss -ulnp | grep :443Se o nginx -t reprovar ou o serviço não voltar, o caminho de diagnóstico é o
mesmo de sempre: ler o systemd em vez de chutar.
Confirme que está mesmo em uso
Servidor configurado não quer dizer cliente conectando. Comece pelo servidor:
# o cabeçalho está sendo enviado?
curl -sI https://exemplo.com | grep -i alt-svc
# o servidor responde em HTTP/3? (curl compilado com suporte a http3)
curl --http3 -sI https://exemplo.com | head -1O teste que realmente importa, porém, é no navegador: abra as ferramentas de
desenvolvedor, vá à aba de rede e adicione a coluna de protocolo. A primeira visita
aparece como h2 — é assim mesmo, o cliente precisa ler o Alt-Svc antes de saber
que existe alternativa. A partir da segunda, deve aparecer h3.
Se a segunda visita continuar em h2, o UDP não está passando em algum ponto do
caminho.
O veredito prático
Ligue se: seu público é majoritariamente móvel ou geograficamente disperso, você controla o firewall, e já resolveu os gargalos óbvios de aplicação e de banco.
Deixe para depois se: o serviço é interno em rede boa, seu tempo é melhor gasto em consulta lenta ou em payload grande, ou você não tem como abrir UDP 443.
De qualquer forma: não é um item de segurança nem de conformidade. Ninguém vai cobrar HTTP/3 de você. É otimização — e otimização se justifica com medição, não com número de versão.
Se o serviço está atrás de CDN, provavelmente a borda já entrega HTTP/3 aos seus usuários sem que você tenha feito nada, e ligar na origem muda pouco. Vale conferir antes de investir a tarde.