Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

05 - Fundamentos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione 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):

  1. O cliente (navegador, curl, script) abre uma conexão TCP com o servidor.
  2. Envia uma requisição (Request) contendo método, URI, cabeçalhos e opcionalmente corpo.
  3. O servidor processa e responde com uma resposta (Response) contendo linha de status, cabeçalhos e corpo.
  4. 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> ou Basic <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 via Cookie:.
  • 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 localStorage ou sessionStorage.

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.