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

  1. RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2) IETF / RFC Editor · rfc-editor.org
  2. HTTP/2 Wikipedia · en.wikipedia.org