Tópico 11 · Camada de Aplicação

Protocolo HTTP

A linguagem da Web: requisição, resposta e a evolução até o HTTP/3 — RFC 9110

· Serviços de Redes

O que é o HTTP

O HyperText Transfer Protocol é o protocolo de aplicação que sustenta a World Wide Web, no modelo requisição-resposta.

  • Cliente-servidor: o cliente (navegador) pede; o servidor responde.
  • Sem estado (stateless): cada requisição é independente.
  • Baseado em texto: mensagens legíveis (até o HTTP/1.1).
  • Roda sobre TCP (portas 80/443) e, no HTTP/3, sobre QUIC/UDP.

URLs identificam recursos

Cada recurso tem um endereço — a URL (https://host/caminho?query). O HTTP define como pedir e transferir esses recursos entre cliente e servidor.

O modelo requisição-resposta

Cliente navegador / app Servidor web server Requisição: método + URL + cabeçalhos (+ corpo) Resposta: status + cabeçalhos + corpo intermediários possíveis no caminho: proxies, caches, gateways e balanceadores

Toda interação na Web é um par requisição/resposta — possivelmente atravessando caches e proxies.

Anatomia das mensagens

Requisição

GET /index.html HTTP/1.1
Host: www.exemplo.com
User-Agent: Mozilla/5.0
Accept: text/html
(linha em branco)
[corpo — em POST/PUT]

Resposta

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Cache-Control: max-age=3600
(linha em branco)
<html>...</html>
Estrutura comum: uma linha inicial (requisição ou status), um bloco de cabeçalhos Nome: valor, uma linha em branco e um corpo opcional.

Métodos (verbos)

MétodoUsoSeguro?Idempotente?
GETRecupera um recurso.SimSim
HEADComo GET, mas só os cabeçalhos.SimSim
POSTCria/submete dados (processa no servidor).NãoNão
PUTCria/substitui um recurso por completo.NãoSim
PATCHAtualiza parcialmente um recurso.NãoNão
DELETERemove um recurso.NãoSim
OPTIONSDescobre capacidades/CORS.SimSim
Seguro = não altera o estado do servidor. Idempotente = repetir tem o mesmo efeito de fazer uma vez.

Códigos de status

ClasseSignificadoExemplos
1xxInformativo100 Continue · 101 Switching Protocols
2xxSucesso200 OK · 201 Created · 204 No Content
3xxRedirecionamento301 Moved Permanently · 302 Found · 304 Not Modified
4xxErro do cliente400 Bad Request · 401 Unauthorized · 403 Forbidden · 404 Not Found · 429 Too Many Requests
5xxErro do servidor500 Internal Server Error · 502 Bad Gateway · 503 Service Unavailable
O primeiro dígito define a categoria — basta ele para saber se a coisa correu bem, foi redirecionada, ou falhou de que lado.

Cabeçalhos (headers)

Na requisição

  • Host — domínio alvo (obrigatório no 1.1).
  • User-Agent — identifica o cliente.
  • Accept / Accept-Language — negociação de conteúdo.
  • Authorization — credenciais.
  • Cookie — estado enviado de volta.

Na resposta

  • Content-Type — tipo MIME do corpo.
  • Content-Length — tamanho do corpo.
  • Set-Cookie — define estado no cliente.
  • Cache-Control / ETag — política de cache.
  • Location — destino de um redirecionamento.

Sem estado — e como contornar isso

O HTTP é stateless: o servidor não "lembra" da requisição anterior. Mas a Web precisa de sessões (login, carrinho…).

Cookies (RFC 6265): o servidor envia Set-Cookie na resposta; o navegador devolve Cookie nas próximas requisições, recriando a noção de sessão.

Sessões e tokens

O cookie costuma guardar um identificador de sessão (estado no servidor) ou um token assinado (ex.: JWT), que carrega a identidade do usuário de forma verificável.

Cache e negociação de conteúdo

Cache

Cache-Control define por quanto tempo um recurso é válido. Com ETag + If-None-Match, o cliente pergunta "mudou?"; se não, o servidor responde 304 Not Modified — sem reenviar o corpo.

Negociação de conteúdo

O cliente declara preferências (Accept, Accept-Language, Accept-Encoding) e o servidor escolhe a melhor representação (formato, idioma, compressão gzip/br).

Por que importa: cache e negociação reduzem latência e tráfego — um recurso não modificado nem precisa ser baixado de novo.

Evolução: do HTTP/0.9 ao HTTP/3

VersãoAnoNovidade principal
HTTP/0.91991GET, uma linha, sem cabeçalhos.
HTTP/1.01996Cabeçalhos, status, tipos de conteúdo.
HTTP/1.11997Conexões persistentes, Host obrigatório, chunked, cache.
HTTP/22015Binário, multiplexação, compressão de cabeçalhos (HPACK).
HTTP/32022Sobre QUIC/UDP: sem head-of-line blocking do TCP, TLS 1.3 integrado.

O problema do head-of-line e a multiplexação

HTTP/1.1 — requisições em série (uma trava a próxima) Requisição A Requisição B (espera A) Requisição C (espera B) → tempo HTTP/2 — streams multiplexados numa só conexão A1 B1 C1 A2 B2 C2 → tempo No HTTP/2, A, B e C avançam intercalados; o HTTP/3 elimina também o bloqueio no nível do TCP, usando QUIC.

A multiplexação acaba com a fila do HTTP/1.1, em que uma resposta lenta atrasava todas as outras.

HTTPS e segurança

Em texto puro, o HTTP pode ser lido e alterado por qualquer um no caminho. O HTTPS é HTTP transportado sobre TLS (tópico 10), agregando confidencialidade, integridade e autenticação.

HSTS (Strict-Transport-Security) força o navegador a sempre usar HTTPS, bloqueando downgrades para HTTP.

Ameaças comuns na Web

Injeção (SQLi), XSS e CSRF exploram a aplicação sobre HTTP. Cabeçalhos de defesa ajudam: CSP (contra XSS), CORS (controle de origem cruzada) e cookies HttpOnly/Secure.

Síntese

Em resumo

O HTTP é o protocolo cliente-servidor e stateless da Web: cada interação é uma requisição (método + URL + cabeçalhos) e uma resposta (status + cabeçalhos + corpo). Cookies recriam sessões; cache e negociação otimizam. Evoluiu do texto simples (1.1) para o binário multiplexado (HTTP/2) e o transporte sobre QUIC (HTTP/3), sempre protegido pelo HTTPS/TLS.

Voltar aos Tópicos