05 - Fundamentos
video: https://youtu.be/... no frontmatter da nota.Fundamentos do Protocolo HTTP
O HTTP (HyperText Transfer Protocol) é o protocolo da Camada de Aplicação que sustenta a comunicação na World Wide Web. Definido originalmente pela RFC 1945 (HTTP/0.9, 1991) e atualizado pelas RFCs 9110, 9112 e 9114 (HTTP Semantics, HTTP/1.1 e HTTP/3, 2022), ele é um protocolo orientado a requisição-resposta, sem estado (stateless) e baseado em texto no seu modelo original.
1. Características Fundamentais
| Atributo | Valor |
|---|---|
| Camada OSI | 7 (Aplicação) |
| Protocolo de transporte | TCP (HTTP/1.0, 1.1, 2) / UDP (HTTP/3 sobre QUIC) |
| Porta padrão | 80 (HTTP) / 443 (HTTPS) |
| Modelo | Cliente-Servidor |
| Estado | Stateless (sem estado nativo) |
| Codificação original | Texto ASCII (HTTP/1.x) |
| RFCs principais | 1945, 2616, 7230-7235, 9110-9114 |
2. Modelo de Funcionamento
O HTTP segue um modelo simples de requisição-resposta (request-response):
- O cliente (navegador,
curl, script) abre uma conexão TCP com o servidor. - Envia uma requisição (Request) contendo método, URI, cabeçalhos e opcionalmente corpo.
- O servidor processa e responde com uma resposta (Response) contendo linha de status, cabeçalhos e corpo.
- A conexão é fechada (HTTP/1.0) ou mantida viva (HTTP/1.1 Keep-Alive).
Estrutura de uma Requisição
POST /api/login HTTP/1.1
Host: exemplo.com
User-Agent: Mozilla/5.0
Content-Type: application/json
Content-Length: 47
Accept: application/json
{"username":"admin","password":"secret"}
Estrutura de uma Resposta
HTTP/1.1 200 OK
Date: Mon, 15 Jan 2024 12:00:00 GMT
Server: nginx/1.25.3
Content-Type: application/json
Content-Length: 28
{"status":"ok","token":"xyz"}
3. Métodos HTTP (Verbos)
| Método | Seguro | Idempotente | Tem corpo | Função |
|---|---|---|---|---|
| GET | Sim | Sim | Não | Recuperar recurso |
| POST | Não | Não | Sim | Criar recurso / submeter dados |
| PUT | Não | Sim | Sim | Substituir recurso |
| PATCH | Não | Não | Sim | Modificar parcialmente |
| DELETE | Não | Sim | Opcional | Remover recurso |
| HEAD | Sim | Sim | Não | Apenas cabeçalhos |
| OPTIONS | Sim | Sim | Não | Descrever opções de comunicação |
| TRACE | Sim | Sim | Não | Diagnóstico (loopback) |
| CONNECT | Não | Não | Opcional | Tunelamento (proxy HTTPS) |
Seguro = não altera estado do servidor. Idempotente = chamadas repetidas produzem o mesmo resultado.
4. Códigos de Status (Respostas)
| Faixa | Classe | Exemplos |
|---|---|---|
| 1xx | Informativo | 100 Continue, 101 Switching Protocols |
| 2xx | Sucesso | 200 OK, 201 Created, 204 No Content |
| 3xx | Redirecionamento | 301 Moved, 302 Found, 304 Not Modified |
| 4xx | Erro do cliente | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many |
| 5xx | Erro do servidor | 500 Internal, 502 Bad Gateway, 503 Unavailable, 504 Timeout |
5. Cabeçalhos Principais
Request Headers
Host: domínio de destino (obrigatório desde HTTP/1.1 para virtual hosting).User-Agent: identifica o cliente.Accept: tipos MIME aceitos (text/html,application/json).Authorization: credenciais (Bearer <token>ouBasic <base64>).Cookie: cookies persistidos pelo navegador.Accept-Encoding: algoritmos de compressão aceitos (gzip, br).If-None-Match/If-Modified-Since: cache condicional (ETag, Last-Modified).
Response Headers
Content-Type: tipo MIME do corpo (text/html; charset=UTF-8).Content-Length: tamanho do corpo em bytes.Set-Cookie: define cookies.Cache-Control: diretivas de cache (max-age=3600, public).Location: URI para redirecionamento (3xx).Strict-Transport-Security: HSTS — força HTTPS.Content-Security-Policy: CSP — previne XSS.
6. Evolução das Versões
HTTP/0.9 (1991)
Apenas método GET, sem cabeçalhos, resposta apenas HTML.
HTTP/1.0 (RFC 1945, 1996)
Introduziu cabeçalhos, métodos adicionais (POST, HEAD) e códigos de status. Cada requisição abre uma nova conexão TCP.
HTTP/1.1 (RFC 2616, 1999 / RFC 9112, 2022)
- Keep-Alive: conexões TCP reutilizáveis (default).
- Pipelining: múltiplas requisições em pipeline (raramente usado).
- Host header: virtual hosting (vários domínios no mesmo IP).
- Chunked Transfer Encoding: corpo em blocos.
HTTP/2 (RFC 7540, 2015)
- Binário (não texto).
- Multiplexação: múltiplas requisições na mesma conexão TCP.
- Server Push: servidor envia recursos antes do cliente pedir.
- HPACK: compressão de cabeçalhos.
- Requer TLS na prática (via ALPN).
HTTP/3 (RFC 9114, 2022)
- Roda sobre QUIC (UDP, RFC 9000).
- Elimina problema de Head-of-Line Blocking do TCP.
- 0-RTT para conexões repetidas.
- Migração de conexão entre redes (Wi-Fi → 4G) sem reinício.
7. Estado e Sessões
HTTP é stateless: cada requisição é independente. Para manter sessões (login, carrinho), usam-se:
- Cookies: servidor envia
Set-Cookie, cliente devolve viaCookie:. - Session IDs: ID aleatório no cookie, mapeado no servidor.
- JWT (JSON Web Token): token assinado criptograficamente, sem necessidade de estado no servidor.
- Token Opacos: armazenados em
localStorageousessionStorage.
8. HTTPS e TLS
HTTPS é HTTP rodando sobre TLS (Transport Layer Security, RFC 8446 para TLS 1.3):
- Handshake TLS: negociação de cifras, certificados X.509, troca de chaves.
- Confidencialidade: cifra simétrica (AES-GCM, ChaCha20-Poly1305).
- Integridade: AEAD protege contra alteração.
- Autenticação: certificado do servidor validado contra CA confiável.
# Testar handshake TLS
openssl s_client -connect exemplo.com:443 -servername exemplo.com
# Verificar certificado e cadeia
curl -vI https://exemplo.com
9. Cache HTTP
Mecanismos de cache reduzem latência e custo de banda:
| Cabeçalho | Função |
|---|---|
Cache-Control: max-age=N |
Tempo máximo de cache (segundos) |
Cache-Control: no-cache |
Revalida antes de usar |
Cache-Control: no-store |
Não armazenar |
ETag |
Hash do recurso |
Last-Modified |
Data de modificação |
Expires |
Data absoluta de expiração |
Vary |
Varia cache por header (ex: Accept-Encoding) |
10. Segurança (OWASP e Headers)
Principais vetores de ataque:
- SQL Injection / XSS / CSRF: falhas de lógica da aplicação.
- Man-in-the-Middle: mitigado com HTTPS + HSTS.
- Clickjacking: mitigado com
X-Frame-Options: DENY. - MIME Sniffing: mitigado com
X-Content-Type-Options: nosniff. - Session Fixation: mitigado com renovação de cookie após login.
Headers de Hardening
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Content-Security-Policy: default-src 'self'; script-src 'self' cdn.jsdelivr.net
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), camera=()
11. Auditoria e Diagnóstico
curl -v http://exemplo.com/ # requisição simples
curl -I https://exemplo.com # apenas cabeçalhos
curl -X POST -H "Content-Type: application/json" -d '{"user":"admin"}' https://exemplo.com/api
curl -w "@curl-format.txt" -o /dev/null -s https://exemplo.com # medir tempos
sudo tcpdump -i eth0 -A port 80 # capturar HTTP para análise
nghttp -v https://exemplo.com # inspecionar HTTP/2
12. Conclusão
O HTTP é o protocolo de aplicação mais utilizado da internet moderna. Compreender seus fundamentos — métodos, status, cabeçalhos, cache, evolução de versões e proteções de segurança — é essencial para qualquer profissional que projete, opere ou defenda aplicações web. As versões modernas (HTTP/2 e HTTP/3) trouxeram ganhos expressivos de performance, mas o modelo sem estado baseado em requisição-resposta permanece a essência do protocolo desde 1991.