Então, a criptografia será movida para a camada de transporte e para fora da camada de aplicativo. Isso significa mais segurança por padrão — até mesmo os cabeçalhos em HTTP/3 são criptografados — mas há um custo correspondente na carga da CPU. No geral, a ideia é que a comunicação será mais rápida devido a melhorias em como a criptografia é negociada, e será mais simples porque será incorporada em um nível mais baixo, evitando os problemas que surgem de uma diversidade de implementações.

Além da criptografia, o QUIC visa fornecer proteção DDoS integrada e segurança “avançada”, onde é mais difícil para um invasor comprometer comunicações passadas, mesmo que os participantes vazem segredos posteriormente.

Fluxos de bytes múltiplos ou multiplexação de granulação fina

Se você está familiarizado com o funcionamento do HTTP/2, você deve estar pensando que ele já faz multiplexação. A multiplexação era, de fato, um dos principais recursos do HTTP/2. O HTTP/3 apenas faz isso de uma maneira nova e melhor. Em particular, o HTTP/3 busca consertar o problema de bloqueio de cabeça de linha (HOL).

O ideal seria consertar esse problema de bloqueio diretamente no TCP. Quando executamos HTTP sobre TCP, podemos (e enviamos) vários arquivos diferentes juntos simultaneamente. Esta é a nossa encarnação atual da multiplexação. Quando você abre um site, o servidor quer enviar o máximo de arquivos possível de uma vez. Isso é bom para velocidade e eficiência. O HTTP/2 permite, mas o TCP não entende arquivos multiplexados. Para o TCP, eles são todos um grande pedaço. Pior, se algum deles falhar, ele tem que reiniciar todos os arquivos dentro daquele fluxo.

O novo protocolo do HTTP/3 é o QUIC, que é meio parecido com o TCP 2.0. Ele cria essa noção de arquivos granulares nos fluxos para que eles possam ser reiniciados de uma forma mais refinada. Melhor ainda, ele faz isso sem destruir toda a infraestrutura TCP existente.

Resiliência de conexão

O que queremos dizer com resiliência de conexão é que quando um dispositivo se move através de redes, há um mecanismo para manter a mesma conexão entre cliente e servidor.

No TCP, essa continuidade não é possível porque o protocolo só entende o endereço IP e o número da porta. Se qualquer um deles mudar — como quando você anda de uma rede para outra enquanto segura um dispositivo móvel — uma conexão inteiramente nova deve ser estabelecida. Essa reconexão leva a uma degradação previsível do desempenho.

O protocolo QUIC introduz IDs de conexão ou CIDs. Por segurança, esses são, na verdade, conjuntos de CIDs negociados pelo servidor e pelo cliente. Então, conexões HTTP/3 usam um endereço IP, porta e um CID, permitindo que elas persistam uma conexão mesmo quando a rede muda e um novo IP ou porta é estabelecido. Isso dá ao protocolo um tipo de persistência conversacional.

Implementação HTTP/3

Mencionei que o HTTP/3 é construído sobre o protocolo QUIC, que é essencialmente uma nova versão do TCP. O QUIC é um protocolo com uma história e evolução contínua, mas o que você precisa saber para os propósitos do HTTP/3 é que ele constrói vários recursos sobre o antigo User Datagram Protocol, ou UDP.

UDP

UDP é um protocolo básico implementado por quase todos os dispositivos de rede e software. Ele é usado para pesquisas de DNS. Sua ubiquidade e simplicidade o tornam uma base sólida para a versão mais recente do HTTP.

Diferentemente do TCP, o UDP é sem conexão e não tem lógica de otimização de rede. O protocolo QUIC é construído sobre o UDP e adiciona esses elementos necessários. Em essência, estamos implementando uma camada de rede melhor que aprende com décadas de experiência no uso real da internet.

RÁPIDO

Enquanto o UDP é sem conexão, o QUIC não é. O QUIC usa confirmações (ACKs) para estabelecer e manter uma conexão. O QUIC também suporta a reentrega de pacotes. Esses recursos são como o TCP, exceto com melhorias projetadas para entregar os três objetivos que já discutimos: criptografia interna, idas e vindas de rede reduzidas e conexões persistentes.

QUIC é o núcleo do HTTP/3 e reimplementa os elementos básicos do TCP (como confirmações e reentrega) de uma forma mais performática e segura com base na experiência do mundo real. UDP foi usado como base do QUIC porque é um protocolo bem estabelecido que fornece uma linha de base mínima para implementação.

O QUIC também foi projetado para ser extensível, o que nos permite evitar a situação em que estamos atualmente com o TCP. O protocolo QUIC usa quadrosque encapsulam usos específicos de datagramas e podem ser adicionados no futuro sem interromper os casos de uso existentes.

O estado atual e futuro do HTTP/3

Todos os recursos, protocolos e a própria especificação HTTP/3 estão em desenvolvimento contínuo, embora o QUIC já esteja sendo usado em navegadores e outros projetos.

HTTP/1, HTTP/2 e HTTP/3 continuarão a coexistir no futuro previsível. Fontes indicam que HTTP/1 ainda é responsável por quase 30% do tráfego da web. HTTP/3 prosseguirá em um modelo de adoção por solicitação semelhante. Por enquanto, HTTP/3 existe como uma camada de rede mais avançada que se expandirá para uso generalizado à medida que mais participantes o apoiarem. Resta saber o quão bem HTTP/3 cumprirá suas promessas quando implantado em escala.

Para a maioria dos programadores ativos, essa mudança é um fato interessante sobre o mundo em que vivemos e trabalhamos, mas não afetará diretamente o código que escrevemos. Não construiremos clientes QUIC diretamente, por exemplo. Claro, essa mudança é mais importante para administradores de rede e operadores de sistema, e qualquer outra pessoa que precise analisar e entender o tráfego de rede. (Na verdade, a natureza criptografada do QUIC tem sido um ponto de discórdia entre alguns operadores de rede porque torna mais difícil identificar padrões e determinar quando os usuários estão abusando da rede.)

Conclusão

HTTP/3 é um recurso significativo do cenário da web daqui para frente. Todo programador fazendo desenvolvimento web vai querer entender como ele funciona em um alto nível, pelo menos. Veja os seguintes recursos para aprender mais sobre HTTP/3 e seus componentes: