Sobes.tech
Junior

Fale sobre as versões do HTTP e as suas diferenças.

sobes.tech IA

Resposta da IA

Versões principais do HTTP:

  • HTTP/0.9: Versão básica para transmissão de documentos HTML simples. Suportava apenas o método GET, sem cabeçalhos nem estados de resposta.
  • HTTP/1.0: Introduzido suporte para cabeçalhos (Content-Type, User-Agent), métodos POST e HEAD, e estados de resposta. A conexão era fechada após cada pedido/resposta.
  • HTTP/1.1: Melhorias significativas:
    • Conexões persistentes (Persistent Connections) - reutilização da conexão TCP para várias solicitações.
    • Pipelining - envio de múltiplas solicitações sem esperar pela resposta anterior (mal implementado e pouco utilizado).
    • Hosts virtuais (cabeçalho Host).
    • Solicitações GET parciais (cabeçalho Range).
    • Cache (Cache-Control, ETag, Last-Modified).
    • Métodos PUT e DELETE.
  • HTTP/2: Protocolo baseado no SPDY do Google. Diferenças principais:
    • Protocolo binário em vez de texto - análise mais eficiente.
    • Multiplexação - transmissão paralela de várias solicitações/respostas numa única conexão TCP. Elimina o problema de "head-of-line blocking" no pipelining HTTP/1.1.
    • Compressão de cabeçalhos (HPACK) - redução do tamanho dos dados transmitidos.
    • Priorização (Server Push) - o servidor pode enviar recursos que provavelmente o cliente precisará antes de os solicitar.
  • HTTP/3: Baseado no UDP (com QUIC - Quick UDP Internet Connections) em vez de TCP. Focado em melhorar o desempenho, especialmente em redes instáveis:
    • Eliminação do "head-of-line blocking" ao nível da conexão TCP. Se um pacote for perdido no TCP, todos os pacotes seguintes ficam bloqueados até à sua retransmissão. No QUIC (e HTTP/3), apenas o fluxo ao qual o pacote perdido pertence fica bloqueado.
    • Estabelecimento de conexão mais rápido (0-RTT ou 1-RTT).
    • O QUIC inclui os seus próprios mecanismos de controlo de fluxo e fiabilidade.

Diferenças principais na tabela:

Funcionalidade HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protocolo TCP TCP TCP UDP (QUIC)
Formato Texto Texto Binário Binário
Conexão por defeito Temporária Permanente Permanente (multiplexagem) Permanente (Streams QUIC)
Multiplexagem Não Imitação (Pipelining) Sim Sim
Compressão de cabeçalhos Não Não HPACK QPACK (no QUIC)
Server Push Não Não Sim Sim
Bloqueio HOL (TCP) Sim (ao nível da solicitação) Sim (ao nível da solicitação) Sim (ao nível da conexão) Não (ao nível do fluxo)

Exemplo de pedido em HTTP/1.1:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*

Exemplo de pedido em HTTP/2 (conceitualmente, pois é binário):

// Pedido 1: Obter /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Pedido 2: Obter /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...transmitidos em paralelo numa única conexão