O HTTP/1.1 abria uma nova conexão para cada requisição ou reutilizava algumas poucas, forçando os navegadores a abrir cerca de seis conexões paralelas para um site. Cada conexão pagava um handshake separado, e uma resposta lenta em uma delas bloqueava as demais atrás de si. A web era lenta por razões estruturais, não técnicas.
O SPDY do Google provou a solução: manter os métodos, cabeçalhos e códigos de status do HTTP exatamente como estavam, mas mover o tráfego para uma única conexão carregando muitos fluxos multiplexados. O IETF assumiu esse trabalho e o padronizou como HTTP/2 na RFC 7540, com enquadramento binário e compressão de cabeçalhos HPACK.
Como a semântica permaneceu idêntica, servidores e navegadores puderam adotá-lo sem repensar o que significa uma requisição HTTP. O transporte mudou; o contrato não, então todo site ganhou a aceleração de graça.
Congelar a semântica do HTTP; executar fluxos sobre uma única conexão.
Como a semântica do HTTP não foi tocada, os servidores existentes puderam adicionar suporte sem mudar a forma como as aplicações escrevem respostas.
Uma conexão com muitos fluxos elimina o gargalo das seis conexões e o custo de estabelecimento de conexão para cada recurso.
O HPACK comprime cabeçalhos repetidos, então os mesmos campos de cookie e user-agent deixam de ser reenviados a cada requisição.
O server push permitia que um servidor enviasse recursos antes de o cliente pedi-los, eliminando uma ida e volta.
Um transporte que preserva a compatibilidade pode vencer mesmo quando a semântica não muda; mantenha o contrato e troque a infraestrutura.
A RFC 7540 foi finalizada em maio de 2015 e se tornou o padrão para essencialmente todo o tráfego HTTPS. Seu principal problema remanescente era o bloqueio de cabeça de fila no TCP, que levou diretamente ao QUIC e ao HTTP/3. O HTTP/2 também possibilitou o contrabando de requisições e o padrão de DoS de redefinição rápida do HTTP/2 descoberto em 2023.
CONFIRA AS EVIDÊNCIAS
As fontes
- RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) IETF / RFC Editor · rfc-editor.org
- HTTP/2 Wikipedia · en.wikipedia.org