Informacional 1xx
Códigos 1xx
100Continue — servidor recebeu os cabeçalhos, cliente deve enviar o corpo
101Switching Protocols — atualizando para WebSocket ou HTTP/2
102Processing — servidor recebeu a requisição, ainda processando (WebDAV)
103Early Hints — pré-carregamento de recursos antes da resposta final
Nota de Uso
# 100 Continue: cliente envia cabeçalho Expect, aguarda 100 curl -H "Expect: 100-continue" -d @large.json URL # 101: upgrade para WebSocket Connection: Upgrade / Upgrade: websocket
Sucesso 2xx
Códigos 2xx
200OK — resposta de sucesso padrão
201Created — recurso criado com sucesso (POST/PUT)
202Accepted — requisição recebida, processamento assíncrono
203Non-Authoritative Info — transformado por proxy
204No Content — sucesso sem corpo de resposta (DELETE)
205Reset Content — sucesso, cliente deve redefinir o formulário
206Partial Content — requisição de intervalo atendida
207Multi-Status — múltiplos códigos de status (WebDAV)
Uso em API REST
GET → 200Retorna recurso com corpo
POST → 201Recurso criado, inclui cabeçalho Location
PUT → 200/204Recurso atualizado (com/sem corpo)
DELETE → 204Excluído, sem corpo retornado
PATCH → 200Atualização parcial, retorna recurso modificado
Redirecionamento 3xx
Códigos 3xx
300Multiple Choices — múltiplas representações disponíveis
301Moved Permanently — recurso movido, atualize os favoritos
302Found — redirecionamento temporário (frequentemente usado indevidamente como 303)
303See Other — redirecione com GET após POST
304Not Modified — use a versão em cache (ETag/If-Modified)
307Temporary Redirect — mesmo método, localização temporária
308Permanent Redirect — mesmo método, localização permanente
Comportamento de Redirecionamento
301/308Permanente — mecanismos de busca atualizam o índice
302/307Temporário — URL original permanece canônica
301/302Pode mudar o método para GET no redirecionamento
307/308Deve preservar o método HTTP original
Erro do Cliente 4xx
Erros Comuns do Cliente
400Bad Request — sintaxe malformada ou parâmetros inválidos
401Unauthorized — autenticação necessária ou falhou
403Forbidden — autenticado, mas sem permissão
404Not Found — recurso não existe
405Method Not Allowed — método HTTP não suportado
406Not Acceptable — não é possível satisfazer o cabeçalho Accept
408Request Timeout — cliente muito lento para enviar a requisição
409Conflict — requisição conflita com o estado atual
Mais Erros do Cliente
410Gone — recurso permanentemente excluído (não apenas ausente)
411Length Required — cabeçalho Content-Length ausente
412Precondition Failed — If-Match/If-Unmodified falhou
413Content Too Large — corpo da requisição excede o limite
414URI Too Long — URL excede o limite do servidor
415Unsupported Media Type — Content-Type não aceito
422Unprocessable Content — sintaxe válida, erros semânticos
429Too Many Requests — limite de taxa excedido
Erro do Servidor 5xx
Códigos 5xx
500Internal Server Error — exceção não tratada no servidor
501Not Implemented — servidor não suporta o método
502Bad Gateway — servidor upstream enviou resposta inválida
503Service Unavailable — sobrecarregado ou em manutenção
504Gateway Timeout — servidor upstream não respondeu a tempo
505HTTP Version Not Supported — versão não suportada
507Insufficient Storage — servidor não pode armazenar a requisição (WebDAV)
511Network Auth Required — login em portal cativo necessário
Estratégia de Reenvio
500Reenvie com backoff; pode ser transitório
502/504Reenvie — problema upstream pode se resolver
503Verifique o cabeçalho Retry-After antes de reenviar
501/505Não reenvie — corrija a requisição do cliente
Códigos Comuns
Códigos Mais Usados (resumo)
200OK — tudo funcionou
201Created — novo recurso criado
204No Content — sucesso, corpo vazio
301Moved Permanently — atualize a URL
304Not Modified — use o cache
400Bad Request — corrija sua requisição
401Unauthorized — faça login primeiro
403Forbidden — permissões insuficientes
404Not Found — URL errada ou excluída
422Unprocessable — erros de validação
429Too Many Requests — reduza a velocidade
500Server Error — não é culpa sua
502Bad Gateway — falha de proxy/upstream
503Unavailable — tente novamente mais tarde
Referência de Cabeçalhos
Cabeçalhos de Requisição
AcceptTipos de mídia desejados na resposta (ex.: application/json)
AuthorizationCredenciais (Bearer token, Basic base64)
Content-TypeTipo de mídia do corpo da requisição
If-None-MatchCondicional: ETag para validação de cache
If-Modified-SinceCondicional: data para validação de cache
Cache-ControlDiretivas de cache (no-cache, max-age)
User-AgentString de identificação do cliente
Cabeçalhos de Resposta
Content-TypeTipo de mídia do corpo da resposta
LocationURL de redirecionamento ou recurso criado
ETagTag de entidade para validação de cache
Cache-ControlDiretivas de cache (max-age, no-store)
Retry-AfterTempo de espera antes de reenviar (429/503)
WWW-AuthenticateEsquema de autenticação exigido (enviado com 401)
Set-CookieDefine cookie no cliente
Padrões Comuns
Fluxo de Cache
# Primeira requisição — servidor retorna ETag GET /api/data → 200, ETag: "abc123" # Requisição subsequente — condicional GET /api/data, If-None-Match: "abc123" → 304 Not Modified (use cache)
Fluxo de Autenticação
# Requisição não autenticada GET /api/secret → 401, WWW-Authenticate: Bearer # Com token GET /api/secret, Authorization: Bearer → 200 OK
Limitação de Taxa
# Resposta com limite de taxa atingido 429 Too Many Requests Retry-After: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1700000000
Negociação de Conteúdo
# Cliente prefere JSON, aceita XML Accept: application/json, application/xml;q=0.9 # Servidor não pode satisfazer → 406 Not Acceptable # Servidor retorna melhor correspondência → 200 + Content-Type