Trilha 10 · Internet e redes

HTTP e HTTPS

HTTP é a língua da web: cliente pede, servidor responde. HTTPS adiciona criptografia para que ninguém no meio leia os dados.

① Intuição

Pedidos e respostas

HTTP é simples: o cliente envia uma requisição (método + caminho + headers + corpo opcional) e o servidor responde com um código de status + headers + corpo. Isso é tudo. O que parece complexo nos frameworks — rotas, middlewares, JSON — é construído em cima desse protocolo básico.

O HTTPS não é um protocolo diferente — é HTTP rodando dentro de um túnel TLS. Antes de qualquer requisição HTTP acontecer, o TLS negocia as chaves de criptografia. Para o usuário, a diferença é o cadeado na barra de endereços.

HTTP é stateless. Cada requisição é independente — o servidor não "lembra" da anterior. Sessões (login persistente) são implementadas com cookies ou tokens enviados em cada requisição.
② Visualização interativa

Construa uma requisição HTTP

Escolha o método, ajuste o path e clique para enviar. Veja os headers automáticos e a resposta JSON da API mock.

REQUISIÇÃO
GET
Host: api.exemplo.com
Accept: application/json
Authorization: Bearer eyJ…
ReadLê dados sem modificar nada no servidor.
RESPOSTA
Clique em Enviar para ver a resposta
③ Explicação técnica

Anatomia de um request e response

# Requisição HTTP/1.1 em texto puro
GET /artigos/introducao HTTP/1.1
Host: exemplo.com
Accept: text/html,application/json
Accept-Language: pt-BR
User-Agent: Mozilla/5.0 (...)
Cookie: sessao=abc123

# Resposta
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 4823
Cache-Control: max-age=3600
Set-Cookie: sessao=abc123; HttpOnly; Secure

[corpo HTML aqui — 4823 bytes]

Como o TLS protege a conexão

# HTTPS = HTTP + TLS. O TLS faz seu próprio handshake antes:

1. Cliente →  ClientHello (versões suportadas, cifras, random)
2. Servidor ← ServerHello + Certificado (chave pública + assinatura CA)
3. Cliente verifica certificado contra lista de CAs confiáveis
4. Cliente →  chave de sessão (criptografada com chave pública do servidor)
5. Ambos derivam a chave simétrica de sessão
6. Dados trafegam criptografados com AES-256-GCM (ou similar)

# TLS 1.3 (moderno): faz tudo em 1-RTT, às vezes 0-RTT
# TLS 1.2 (legado): 2-RTT — um handshake extra de latência
Códigos de status HTTP: 1xx (informativo) · 2xx (sucesso: 200 OK, 201 Created, 204 No Content) · 3xx (redirecionamento: 301, 302) · 4xx (erro do cliente: 400, 401, 403, 404, 422) · 5xx (erro do servidor: 500, 502, 503). Usar os códigos certos é parte do design de uma boa API.
④ Projeto para programar

Implemente HTTP do zero

Mini projeto: usando um socket TCP, conecte em exemplo.com:80 e envie manualmente: GET / HTTP/1.0\r\nHost: exemplo.com\r\n\r\n. Leia e imprima a resposta. Você acabou de implementar um browser básico.

Projeto principal: implemente um servidor HTTP mínimo que serve arquivos estáticos de um diretório. Deve responder 200 + conteúdo para arquivos existentes e 404 para os que não existem, com Content-Type correto por extensão.

Desafio extra: adicione suporte a If-None-Match (ETag) para cache condicional: calcule o hash do arquivo, retorne-o no header ETag, e responda 304 Not Modified se o cliente já tem a versão atual.

⑤ Exercícios rápidos

Teste sua intuição

Um usuário acessa uma URL que não existe no servidor. Qual código de status o servidor deve retornar?
Qual é a relação correta entre HTTP e HTTPS?
O método HTTP HEAD é idêntico ao GET, exceto que…
⑥ Aplicações no mundo real

Onde você encontra isso

🚀

HTTP/2 e HTTP/3

HTTP/2 multiplexou múltiplos requests numa conexão TCP. HTTP/3 usa QUIC/UDP para eliminar head-of-line blocking e handshake mais rápido.

🍪

Cookies e sessões

Set-Cookie no response, Cookie no request. HttpOnly previne acesso por JS; Secure requer HTTPS; SameSite previne CSRF.

📦

Cache e CDN

Cache-Control, ETag e Last-Modified controlam o cache do browser e dos servidores intermediários (Nginx, Varnish, CloudFront).

🔒

Certificados e CAs

Let's Encrypt emite certificados TLS gratuitos e automatizados. HSTS obriga HTTPS para um domínio por um período definido.

← Anterior: TCP Próxima: Como uma página carrega →