Simulador interativo do protocolo HTTP

O protocolo HTTP é baseado em texto puro. Passe o mouse sobre cada parte para entender o que ela significa.

Requisição HTTP
GET/api/usuarios/42HTTP/1.1
Host: api.exemplo.com
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
User-Agent: Mozilla/5.0 (Chrome/120)
— linha vazia (CRLF) —
(GET não tem corpo — body ausente)
Exemplo com corpo (POST)
POST/api/booksHTTP/1.1
Host: api.exemplo.com
Content-Type: application/json
Content-Length: 47
— linha vazia (CRLF) —
{"titulo": "Dom Casmurro", "autor": "Machado de Assis", "isbn": "978-8535902778"}
Linha de requisição
Headers
Corpo (body)
Separador CRLF
Passe o mouse sobre qualquer parte destacada para ver a explicação.
Resposta HTTP
HTTP/1.1200OK
Content-Type: application/json; charset=utf-8
Content-Length: 89
Date: Thu, 26 Mar 2026 12:00:00 GMT
Cache-Control: max-age=3600
X-Request-Id: a1b2c3d4-e5f6-7890
— linha vazia (CRLF) —
{
  "id": 42,
  "titulo": "Dom Casmurro",
  "autor": "Machado de Assis",
  "isbn": "978-8535902778",
  "disponivel": true
}
Linha de status
Headers
Corpo (body)
Separador CRLF
Passe o mouse sobre qualquer parte destacada para ver a explicação.
Fluxo Completo
💻
CLIENTE
① TCP Handshake (SYN → SYN-ACK → ACK)
② Cliente envia a Requisição HTTP
③ Servidor processa e envia Resposta HTTP
🖥️
SERVIDOR
SEM ESTADO (Stateless)
Cada requisição é independente. O servidor não guarda contexto entre requisições.
TEXTO PURO
Mensagens HTTP são legíveis por humanos (ASCII/UTF-8). Diferente de protocolos binários.
CAMADA DE APLICAÇÃO
HTTP roda sobre TCP/IP. HTTPS adiciona TLS entre HTTP e TCP para criptografia.
PORTA PADRÃO
HTTP: porta 80. HTTPS: porta 443. Podem ser alteradas na URL.
Texto Puro… mas Compactado

Embora as mensagens HTTP sejam texto legível por humanos, na prática o corpo (body) quase sempre trafega comprimido na rede. Os headers negociam isso automaticamente entre cliente e servidor.

Accept-Encoding: gzip, deflate, br
Header enviado pelo cliente na requisição. Lista os algoritmos de compressão que ele sabe descompactar.
Content-Encoding: gzip
Header devolvido pelo servidor na resposta. Indica o algoritmo usado para comprimir o body.
Algoritmos comuns
gzip — mais universal, suportado em todos os browsers
deflate — zlib/deflate, menos usado atualmente
br — Brotli, desenvolvido pelo Google, melhor compressão
zstd — Zstandard, altíssima velocidade (HTTP/2+)
O que é comprimido?
Body — JSON, HTML, CSS, JS: comprimir reduz até 70–90% do tamanho
Headers HTTP/1.1 — sempre trafegam em texto puro
Headers HTTP/2 — comprimidos com HPACK
Headers HTTP/3 — comprimidos com QPACK

Monte uma requisição HTTP e veja como ela seria formatada. A simulação mostra a mensagem raw exatamente como trafega pelo protocolo.

Método
URL
Headers
Corpo (Body)
💻 Cliente
REQ
RES
🖥️ Servidor
→ Requisição GET
Configure e clique em Simular Envio...
← Resposta
Aguardando envio...
Método
GET
Status
Tamanho req.
— B

O que são Tipos MIME?

MIME (Multipurpose Internet Mail Extensions) é o padrão que diz ao receptor como interpretar o conteúdo de uma mensagem. No HTTP, o header Content-Type carrega o tipo MIME da requisição ou resposta. Sem ele, o browser ou servidor precisaria "adivinhar" o formato — o que leva a erros de renderização, falhas de segurança e comportamentos imprevisíveis.

Cada tipo MIME segue a estrutura tipo/subtipo, com parâmetros opcionais como charset. Existe também o tipo especial */* (wildcard), usado no header Accept para indicar que qualquer formato é aceito.

text/html; charset=utf-8
tipo subtipo parâmetro
💡

O header Content-Type é usado tanto na requisição (para dizer ao servidor como interpretar o body enviado) quanto na resposta (para dizer ao cliente como interpretar o body recebido). Já o header Accept, enviado pelo cliente, lista os tipos MIME que ele consegue processar — o servidor usa isso para fazer content negotiation e escolher o melhor formato de resposta.

Tipo MIME Extensões Descrição & Uso Onde aparece
Content Negotiation — Como Funciona na Prática
Cliente envia no header Accept:
Accept: text/html,
        application/xhtml+xml,
        application/xml;q=0.9,
        image/webp,
        */*;q=0.8
O parâmetro q= é o fator de qualidade (0 a 1). O servidor prioriza os tipos com maior q-value — text/html tem prioridade máxima (q=1 implícito), */* é o fallback.
Servidor responde com Content-Type:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Vary: Accept

<!DOCTYPE html>
<html>...</html>
O header Vary: Accept indica que a resposta varia conforme o Accept do cliente — importante para caches não entregarem o tipo errado.
⚠️

MIME Sniffing e Segurança: Quando o servidor omite o Content-Type, browsers tentam "adivinhar" o tipo pelo conteúdo — isso se chama MIME sniffing. Isso é perigoso: um arquivo malicioso enviado como text/plain pode ser executado como HTML/JS. O header X-Content-Type-Options: nosniff instrui o browser a nunca sobrescrever o Content-Type declarado.

Aprofunde seu conhecimento em HTTP

Seleção de documentações oficiais, ferramentas, vídeos e livros para você ir além do protocolo e entender como a web realmente funciona.

Documentação Oficial & RFCs
Ferramentas para Praticar
Vídeos & Cursos
Livros
Roteiro de Estudo Sugerido
1
Entenda a estrutura das mensagens
Explore a aba Anatomia deste simulador. Compreenda request line, status line, headers e body. Leia a visão geral do MDN em PT-BR.
2
Domine os métodos e status codes
Use as abas Métodos e Códigos de Status. Entenda a diferença entre seguro/idempotente e decore os grupos 2xx, 3xx, 4xx, 5xx.
3
Pratique com ferramentas reais
Instale o Hoppscotch ou Postman. Faça requisições GET, POST e DELETE contra o httpbin.org e observe os headers reais na resposta.
4
Inspecione o tráfego real
Abra o DevTools do browser (F12 → aba Network). Navegue em qualquer site e observe as requisições reais: headers enviados, status codes e tempo de resposta.
5
Aprofunde em HTTP/2, HTTPS e segurança
Assista ao vídeo HTTP/1 vs /2 vs /3. Estude CORS, autenticação com JWT, e como o TLS/SSL protege as mensagens no HTTPS. Leia o livro HTTP: The Definitive Guide.

Escolher Header de Requisição