Toda vez que seu navegador pede uma página, o servidor responde com um código de status HTTP: um número de três dígitos que resume o que aconteceu com aquela requisição. Você quase nunca vê esse número no dia a dia, porque quando tudo dá certo o navegador simplesmente mostra a página. Mas quando algo quebra, o código aparece na sua cara: 404, 500, 403. Entender o que cada um diz economiza horas de depuração, porque o próprio número já aponta para o lado onde está o problema.
O primeiro dígito define a família do código e, com ela, o tipo de resposta. Decorar as cinco famílias é mais útil do que decorar código por código: se você sabe que 4xx é culpa do pedido e 5xx é culpa do servidor, já sabe onde começar a investigar. Vamos por família.
1xx — Informativo
A requisição foi recebida e o processo continua; são respostas provisórias que o navegador trata sozinho e você raramente percebe.
- 100 Continue — pode seguir enviando o corpo da requisição.
- 101 Switching Protocols — o servidor vai trocar de protocolo (comum em WebSocket).
2xx — Sucesso
Deu tudo certo: o pedido foi recebido, entendido e processado. É a família que você nunca vê como erro.
- 200 OK — a requisição funcionou; é o código mais comum da web.
- 201 Created — algo foi criado com sucesso (típico de APIs após um POST).
- 204 No Content — deu certo, mas não há conteúdo para devolver.
3xx — Redirecionamento
O recurso que você pediu está em outro lugar, e o navegador normalmente segue o redirecionamento sozinho.
- 301 Moved Permanently — mudou de endereço para sempre.
- 302 Found — redirecionamento temporário.
- 304 Not Modified — nada mudou desde a última vez; use a versão do cache.
4xx — Erro do cliente
O problema está no pedido: URL errada, falta de permissão, dados malformados. A correção costuma estar do seu lado, não do servidor.
- 400 Bad Request — o servidor não entendeu a requisição.
- 401 Unauthorized — falta autenticação (você precisa fazer login).
- 403 Forbidden — autenticado, mas sem permissão.
- 404 Not Found — o recurso não existe nesse endereço.
- 429 Too Many Requests — você mandou pedidos demais; espere.
5xx — Erro do servidor
O pedido estava certo, mas o servidor falhou ao processá-lo. Aqui a correção quase sempre está do lado de quem mantém o site, não de quem acessa.
- 500 Internal Server Error — erro genérico no servidor.
- 502 Bad Gateway — um servidor intermediário recebeu resposta inválida.
- 503 Service Unavailable — servidor sobrecarregado ou em manutenção.
- 504 Gateway Timeout — o servidor de trás demorou demais para responder.
Os campeões (e o que fazer)
Alguns códigos aparecem tanto que vale conhecê-los a fundo:
404 Not Found. O endereço pedido não existe. Costuma ser erro de digitação na URL ou link quebrado (página que foi movida ou apagada). O que fazer: confira a URL caractere por caractere; se o link é seu, aponte-o para o endereço correto ou crie um redirecionamento 301.
403 Forbidden. O servidor entendeu o pedido mas se recusa a atendê-lo, mesmo que você esteja logado. O que fazer: verifique permissões de arquivo (em sites PHP é clássico permissão errada em pastas), regras do servidor ou se o recurso é realmente restrito ao seu usuário.
301 Moved Permanently. A página migrou de endereço de forma definitiva. É o redirecionamento que você quer usar ao trocar URLs, porque buscadores transferem a autoridade da página antiga para a nova. O que fazer: ao renomear ou mover uma página, configure um 301 do endereço velho para o novo e evite deixar links apontando para o 404.
500 Internal Server Error. Algo quebrou no servidor e ele não soube como responder. É genérico de propósito: o detalhe real está nos registros. O que fazer: abra os logs do servidor ou da aplicação (em muitos casos um erro de código, conexão com banco ou variável de ambiente faltando) — a mensagem de erro de verdade está lá, não na tela.
503 Service Unavailable. O servidor está temporariamente indisponível: sobrecarga de tráfego ou manutenção. O que fazer: se é um pico de acesso, espere ou escale o servidor; se é um deploy, confira se o processo subiu corretamente. Diferente do 500, costuma se resolver sozinho em instantes.
Essas cinco famílias e um punhado de campeões já cobrem a enorme maioria do que você vai encontrar na prática. Para os demais códigos — e há dezenas deles, de 418 a 451 — guarde na memória a tabela de códigos de status HTTP e consulte sempre que um número novo aparecer no log.