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.
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.
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.
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
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.
Teste sua intuição
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.