O que são os códigos de erro do cliente?
"Você cometeu um erro"
Imagine que você entra em uma biblioteca e pede um livro que não existe. O bibliotecário não se desculpa: não é culpa da biblioteca. Ele diz: "Nós não temos esse livro." Esse é o espírito de um código de status 4xx.
Quando um servidor responde com um código de status 4xx, ele está dizendo: "Há um problema com A SUA requisição. Eu entendi o que você enviou, mas não posso ou não vou processá-la." O erro está do lado do cliente: URL errada, credenciais faltando, dados inválidos, ou algo mais que o cliente fez errado.
Erros do cliente vs. erros do servidor
Códigos de status HTTP na faixa 4xx significam que o cliente cometeu um erro. Códigos na faixa 5xx significam que o servidor cometeu um erro. Essa distinção importa:
| Faixa | Culpa de Quem? | Significado | Exemplo |
|---|---|---|---|
| 4xx | Cliente | "Você enviou algo errado" | Erro de digitação na URL, login faltando, dados de formulário inválidos |
| 5xx | Servidor | "Algo quebrou do nosso lado" | Banco de dados fora do ar, bug no código, servidor sobrecarregado |
Por que isso importa para desenvolvedores?
- Erros 4xx significam que seu código deve guiar o usuário a corrigir sua requisição (mostrar uma mensagem de "página não encontrada", destacar campos inválidos no formulário, pedir login)
- Erros 5xx significam que seu código tem um bug ou sua infraestrutura tem um problema: o usuário não consegue corrigir
A família 4xx em resumo
A faixa 4xx tem muitos códigos, mas um punhado aparece em quase toda aplicação web:
| Código | Nome | Quando É Usado |
|---|---|---|
| 400 | Bad Request | A requisição é malformada: o servidor não consegue interpretá-la |
| 401 | Unauthorized | O cliente precisa se autenticar (fazer login) |
| 403 | Forbidden | O cliente está autenticado mas não tem permissão |
| 404 | Not Found | O recurso solicitado não existe |
| 405 | Method Not Allowed | O método HTTP não é suportado para esta URL |
| 409 | Conflict | A requisição conflita com o estado atual do recurso |
| 422 | Unprocessable Content | A requisição é bem formada mas semanticamente inválida |
| 429 | Too Many Requests | O cliente foi limitado por rate limiting |
Vamos focar nos mais importantes ao longo deste curso.
A anatomia de uma resposta 4xx
Uma boa resposta 4xx faz mais do que apenas dizer "erro." Ela diz ao cliente o que deu errado e como corrigir:
HTTP/1.1 422 Unprocessable Content
Content-Type: application/json
{
"errors": {
"email": ["is not valid"],
"password": ["is too short (minimum is 8 characters)"]
}
}
Compare com uma resposta inútil:
HTTP/1.1 400 Bad Request
Content-Type: text/plain
Error
A primeira resposta diz ao cliente o que corrigir. A segunda o deixa adivinhando. Sempre mire na primeira abordagem.
4xx no navegador
Quando um navegador encontra um erro 4xx, o que o usuário vê depende da aplicação:
Sem tratamento personalizado de erros:
O usuário recebe uma página padrão crua: a página de fábrica do framework (o Rails traz public/404.html) ou o "404 Not Found" simples do servidor web. Só quando o corpo vem vazio o navegador mostra a própria página de erro.
Com tratamento personalizado de erros:
A aplicação renderiza uma página de erro amigável com informações úteis, links de navegação e talvez uma barra de busca para ajudar o usuário a encontrar o que procurava.
Aplicações profissionais sempre implementam páginas de erro personalizadas. Uma página 404 bem projetada pode transformar uma experiência frustrante em uma positiva.
Equívocos comuns
"401 significa que o usuário não tem permissão"
Não: 401 significa que o usuário não se identificou (não está logado). Se ele está logado mas não tem permissão, isso é 403 Forbidden. Vamos cobrir essa distinção em detalhes na Aula 3.
"422 e 400 são a mesma coisa"
São relacionados mas diferentes. 400 significa que a requisição é malformada (o servidor nem consegue interpretá-la). 422 significa que a requisição é bem formada mas os dados são inválidos (como enviar um email sem @). Vamos explorar isso na Aula 5.
"404 significa que algo está quebrado"
Não necessariamente. Um 404 significa que o recurso não existe naquela URL. Pode ser um erro de digitação, uma página excluída, ou uma URL que nunca existiu. É o erro mais comum e mais normal da web.
Quando retornar qual código
Escolher o código 4xx correto torna sua API e aplicação mais fáceis de entender e debugar:
flowchart TB
A{"A requisição é malformada?"} -->|"sim"| A1["400 Bad Request"]
A -->|"não"| B{"O usuário está autenticado?"}
B -->|"não"| B1["401 Unauthorized"]
B -->|"sim"| C{"O usuário tem permissão?"}
C -->|"não"| C1["403 Forbidden"]
C -->|"sim"| D{"O recurso existe?"}
D -->|"não"| D1["404 Not Found"]
D -->|"sim"| E{"Os dados são válidos?"}
E -->|"não"| E1["422 Unprocessable Content"]
E -->|"sim"| F["Processar a requisição (2xx)"]
Essa árvore de decisão vai se tornar natural conforme você constrói mais aplicações.
Resumo
| Conceito | Ponto Chave |
|---|---|
| Significado do 4xx | O cliente cometeu um erro: o servidor entendeu a requisição mas não pode processá-la |
| vs. 5xx | 4xx = culpa do cliente, 5xx = culpa do servidor |
| Boas respostas de erro | Dizem ao cliente o que deu errado e como corrigir |
| Páginas de erro personalizadas | Apps profissionais renderizam páginas amigáveis, não os padrões do navegador |
| Códigos mais comuns | 400, 401, 403, 404, 422, 429 |
| Escolhendo o código certo | Siga a árvore de decisão: malformada → auth → permissão → existência → validação |
Continue com a aula 2
400 Bad Request
Explica o 400 para requisições malformadas, como JSON quebrado, Content-Type errado ou codificação de URL inválida.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.