trilha

System Design/02 - Componentes/Communication2 min

HTTP

Perguntas-guia
  • Que problema isso resolve?
  • Quando usar / quando NÃO usar?
  • Qual o principal trade-off?
  • Como isso falha em produção?

Conceito

Protocolo de aplicação stateless de requisição-resposta que sustenta a web e a maioria das APIs.

Métodos

Método Seguro Idempotente Semântica
GET Sim Sim Ler
HEAD Sim Sim Ler só os headers
POST Não Não Criar, ação não idempotente
PUT Não Sim Substituir por completo
PATCH Não Depende Alterar parcialmente
DELETE Não Sim Remover

Status codes que importam

Faixa Significado Exemplos úteis
2xx Sucesso 200, 201 Created, 202 Accepted, 204 No Content
3xx Redirecionamento 301 permanente, 302 temporário, 304 Not Modified
4xx Erro do cliente 400, 401 (não autenticado), 403 (não autorizado), 404, 409, 429
5xx Erro do servidor 500, 502, 503, 504

A distinção 4xx/5xx orienta retry: repetir um 4xx (exceto 429) não adianta — o pedido está errado. 5xx e 429 são candidatos a Retry com backoff.

Evolução do protocolo

Versão Transporte Ganho principal
1.1 TCP keep-alive; uma requisição por vez por conexão
2 TCP Multiplexação, headers comprimidos, push
3 QUIC/UDP Sem head-of-line blocking, handshake em 1 RTT

Trade-offs

Stateless é a propriedade que torna o HTTP escalável: qualquer servidor atende qualquer requisição, o que viabiliza Horizontal Scaling e cache intermediário. O preço é que o contexto viaja em toda requisição — cookie, token, headers — inflando o tráfego.

HTTP/2 resolveu o bloqueio de linha na camada HTTP e não conseguiu resolvê-lo na camada TCP: uma perda de pacote ainda trava todos os streams multiplexados. HTTP/3 resolve movendo para QUIC, ao custo de UDP ser bloqueado por alguns firewalls corporativos.

Cache é a maior alavanca de performance que o protocolo oferece, e depende de headers corretos — assunto de Client Caching e CDN Caching.

Exemplo prático

Uma página com 100 recursos pequenos:

HTTP/1.1: 6 conexões paralelas, uma requisição por vez em cada
          → 17 rodadas sequenciais
HTTP/2:   1 conexão, 100 streams multiplexados
          → praticamente 1 rodada

É por isso que técnicas de HTTP/1.1 como sprite de imagens e concatenação de arquivos deixaram de fazer sentido — e passaram a atrapalhar, porque um bundle grande invalida inteiro quando uma linha muda, enquanto arquivos separados aproveitam o cache do que não mudou.

Relacionado


Parte de Communication · roadmap.sh/system-design

Buscar

Busca por título, seção e texto das notas