Skip to main content

Versões HTTP | Protocolo HTTP | Redes

  • Versões HTTP | Protocolo HTTP | Redes

alt text

  • POC realizada alt text

Recomendações

alt text


Evolução do HTTP

Uma visão curta das principais versões do HTTP, com o que mudou e um exemplo simples de cada uma.


HTTP/0.9

A primeira versão do HTTP era extremamente simples.

Características

  • Só suportava GET
  • Não tinha headers
  • Não tinha status code
  • A resposta normalmente era apenas o conteúdo HTML

Exemplo de requisição

GET /index.html

Exemplo de resposta

<html>
<body>
<h1>Olá</h1>
</body>
</html>

Observação

Era praticamente uma forma de buscar páginas HTML de maneira crua.


HTTP/1.0

O HTTP/1.0 trouxe uma estrutura mais completa para requisição e resposta.

Características

  • Suporte a múltiplos métodos, como GET, POST e HEAD
  • Introdução de headers
  • Introdução de status codes
  • Cada requisição normalmente abria e fechava uma conexão TCP

Exemplo de requisição

GET /produtos HTTP/1.0
Host: exemplo.com
User-Agent: MeuCliente/1.0

Exemplo de resposta

HTTP/1.0 200 OK
Content-Type: text/html

<h1>Lista de produtos</h1>

Problema principal

Abrir e fechar conexão para cada requisição era caro.


HTTP/1.1

Foi a versão mais usada por muitos anos e ainda é muito comum.

Características

  • Conexões persistentes por padrão (keep-alive)
  • Mais métodos, como PUT, DELETE, OPTIONS, PATCH
  • Header Host obrigatório
  • Melhor reaproveitamento da conexão TCP

Exemplo de requisição

GET /api/clientes HTTP/1.1
Host: api.exemplo.com
Accept: application/json
Connection: keep-alive

Exemplo de resposta

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 27

{"id":1,"nome":"Adolfo"}

Vantagem principal

Menos custo com abertura de conexão.


HTTP/2

O HTTP/2 manteve a semântica do HTTP/1.1, mas mudou a forma de transportar os dados.

Características

  • Multiplexação: várias requisições na mesma conexão
  • Headers binários e comprimidos
  • Melhor performance
  • Evita boa parte do problema de bloqueio por fila de requisições

Exemplo conceitual

No HTTP/2, o cliente pode mandar várias requisições ao mesmo tempo na mesma conexão TCP:

Stream 1 -> GET /css/site.css
Stream 3 -> GET /js/app.js
Stream 5 -> GET /img/logo.png

Exemplo equivalente de requisição

Em termos lógicos, continua parecendo HTTP normal:

GET /api/pedidos HTTP/2
Host: api.exemplo.com
Accept: application/json

Resposta

:status: 200
content-type: application/json

{"pedidoId":99}

Vantagem principal

Uma única conexão consegue carregar vários recursos ao mesmo tempo.


HTTP/3

O HTTP/3 troca o TCP por QUIC, que roda sobre UDP.

Características

  • Usa QUIC em vez de TCP
  • Menor latência
  • Melhor recuperação em perda de pacotes
  • Evita bloqueios no nível de transporte que ocorriam no TCP
warning
  • resolve limitações do TCP em cenários de perda de pacote e instabilidade
  • melhora especialmente quando há:
    • retransmissões
    • jitter
    • troca de rede
    • conexão móvel/wifi ruim

Exemplo conceitual

Vários fluxos independentes dentro de uma conexão QUIC:

Stream 1 -> GET /index.html
Stream 2 -> GET /style.css
Stream 3 -> GET /script.js

Exemplo lógico de requisição

Para quem desenvolve API ou backend, continua parecido:

GET /api/usuarios HTTP/3
Host: api.exemplo.com
Accept: application/json

Exemplo de resposta

:status: 200
content-type: application/json

[{"id":1,"nome":"Maria"}]

Vantagem principal

Melhor desempenho em redes modernas, principalmente móveis e instáveis.


Resumo rápido

VersãoTransporteDestaque
HTTP/0.9TCPGET, sem headers
HTTP/1.0TCPHeaders e status codes
HTTP/1.1TCPConexões persistentes
HTTP/2TCPMultiplexação
HTTP/3QUIC/UDPMenor latência e melhor resiliência

Ponto importante

Do ponto de vista de quem desenvolve APIs:

  • HTTP/1.1, HTTP/2 e HTTP/3 mantêm a ideia de métodos, rota, headers e status code
  • o que mais muda é o protocolo de transporte e a performance
  • ou seja: sua API continua parecida, mas a comunicação fica mais eficiente nas versões novas