Mensagens de Status HTTP
Referência clara sobre códigos de status HTTP (1xx–5xx) com os mais comuns explicados e um exemplo de fetch() que ramifica em response.status.
Toda vez que um navegador carrega uma página, envia um formulário, ou seu JavaScript faz uma chamada fetch(), o servidor responde com um código de status HTTP de três dígitos. Esse código informa ao cliente se a requisição foi bem-sucedida, foi redirecionada, falhou por algo que o cliente fez, ou falhou no lado do servidor. O navegador usa isso automaticamente — ele segue redirecionamentos, exibe sua própria página de erro para alguns códigos e reutiliza conteúdo em cache para outros — mas como desenvolvedor você também lê esses códigos diretamente: um formulário é enviado e você ramifica na resposta, ou um fetch() é resolvido e você verifica response.ok (que é simplesmente "status no intervalo 200–299").
Aqui você pode encontrar a lista de códigos de status de resposta do Hypertext Transfer Protocol (HTTP). Esses códigos respondem à requisição que um cliente faz a um servidor — seja usando GET, POST ou outro método HTTP — e são agrupados em 5 classes pelo primeiro dígito. Conhecê-los ajuda a depurar links quebrados, URLs incorretas, envios de formulário com falha e respostas de API inesperadas. Vamos percorrer cada classe:
Se você receber uma resposta que não está incluída nesta lista, significa que é uma resposta não padrão, talvez personalizada para o software do servidor.
Tratando códigos de status em JavaScript
Quando você envia um formulário ou chama uma API com fetch(), a requisição é bem-sucedida (a promise é resolvida) mesmo quando o servidor retorna um erro 4xx ou 5xx — um 404 ou 500 ainda é uma resposta HTTP válida, não uma falha de rede. Portanto, você deve inspecionar o status por conta própria. O atalho útil é response.ok, que é true apenas para o intervalo 200–299; para qualquer outra coisa você ramifica em response.status para reagir adequadamente:
const form = document.querySelector("#signup");
form.addEventListener("submit", async (event) => {
event.preventDefault();
const response = await fetch("/api/signup", {
method: "POST",
body: new FormData(form),
});
if (response.ok) {
// 200–299: success
window.location.href = "/welcome";
} else if (response.status === 401) {
showMessage("Please log in first.");
} else if (response.status === 422) {
// Validation errors returned as JSON
const data = await response.json();
showMessage(data.error);
} else if (response.status === 429) {
// Rate limited — respect the Retry-After header
const wait = response.headers.get("Retry-After");
showMessage(`Too many attempts. Try again in ${wait}s.`);
} else if (response.status >= 500) {
showMessage("Server error — please try again later.");
} else {
showMessage(`Unexpected error (${response.status}).`);
}
});Note que fetch() só rejeita em problemas genuínos de rede (sem conexão, bloqueio CORS, falha de DNS), portanto envolver a chamada em try…catch lida com esses casos, enquanto o if/else acima lida com o status HTTP em si.
Os códigos mais comuns para conhecer primeiro. Se você vai memorizar apenas alguns, escolha estes: 200 (OK), 301 (Moved Permanently), 302 (Found / redirecionamento temporário), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) e 500 (Internal Server Error). Eles cobrem a grande maioria do que você verá nas ferramentas de desenvolvedor do navegador e nos logs do servidor.
1xx: Informação
| Código de status | Mensagem | Descrição |
|---|---|---|
| 100 | Continue | Significa que o servidor recebeu os cabeçalhos da requisição e o cliente deve continuar a enviar o corpo da requisição. |
| 101 | Switching Protocols | Significa que o cliente, que fez a requisição, pediu ao servidor para mudar de protocolo (por exemplo, para atualizar para uma conexão WebSocket). |
| 102 | Processing | Um código WebDAV que significa que o servidor aceitou a requisição, mas ainda não a concluiu; usado para evitar que o cliente expire em uma operação longa. |
| 103 | Early Hints | Definido na RFC 8297. Permite que o servidor envie alguns cabeçalhos de resposta (como cabeçalhos Link que pré-carregam recursos) antes da resposta final, para que o navegador possa começar a buscar ativos mais cedo. |
2xx: Sucesso
| Código de status | Mensagem | Descrição |
|---|---|---|
| 200 | OK | Significa que a requisição foi aceita. É a resposta padrão para requisições HTTP bem-sucedidas. |
| 201 | Created | Significa que a requisição foi atendida e um novo recurso foi criado. |
| 202 | Accepted | Significa que a requisição foi aceita para processamento, mas o processamento ainda está em andamento. |
| 203 | Non-Authoritative Information | Significa que a requisição foi processada com sucesso, mas está retornando informações que podem ser de outra fonte. |
| 204 | No Content | Significa que a requisição foi processada com sucesso, mas não está retornando nenhum conteúdo. |
| 205 | Reset Content | Significa que a requisição foi processada, mas não está retornando nenhum conteúdo e exige que o solicitante redefina a visualização do documento. |
| 206 | Partial Content | Significa que o servidor confirma apenas uma parte do recurso, por causa de um cabeçalho de intervalo enviado pelo cliente. |
3xx: Redirecionamento
| Código de status | Mensagem | Descrição |
|---|---|---|
| 300 | Multiple Choices | Indica múltiplas opções para o recurso que o cliente pode seguir. |
| 301 | Moved Permanently | Significa que a página foi movida permanentemente para uma nova URL. Navegadores e mecanismos de busca atualizam suas referências, então um 301 transfere a equidade de link para a nova URL e é a escolha correta para redirecionamentos amigáveis ao SEO. |
| 302 | Found | Significa que a página solicitada foi movida temporariamente para uma nova URL. Os mecanismos de busca mantêm a URL original indexada, portanto use 302 (não 301) quando a mudança for de curta duração, como durante manutenção ou testes A/B. |
| 303 | See Other | Significa que a resposta à requisição pode ser encontrada em outra URL, que o cliente deve recuperar com GET. Comumente usado após um POST de formulário para redirecionar para uma página de resultados. |
| 304 | Not Modified | Significa que o recurso solicitado não foi modificado desde o último armazenamento em cache. O servidor não envia corpo, então o navegador reutiliza sua cópia em cache — isso economiza largura de banda e acelera visitas repetidas. |
| 307 | Temporary Redirect | Significa que a página solicitada foi movida temporariamente para uma nova URL. Ao contrário do 302, o cliente deve manter o método de requisição original (um POST continua sendo um POST). |
| 308 | Permanent Redirect | Significa que o recurso solicitado foi movido permanentemente para uma nova URL. |
Códigos não listados aqui (como 305 e 306) estão obsoletos, são raros ou são específicos de extensões.
4xx: Erro do Cliente
| Código de status | Mensagem | Descrição |
|---|---|---|
| 400 | Bad Request | Significa que a requisição não pode ser atendida devido a sintaxe incorreta ou dados inválidos. |
| 401 | Unauthorized | Significa que o cliente não está autenticado — credenciais válidas estão ausentes ou incorretas. O servidor ainda não sabe quem você é, então solicita que você faça login. (Observação: o nome diz "Unauthorized" mas realmente significa "Unauthenticated".) |
| 402 | Payment Required | Está reservado para uso futuro. |
| 403 | Forbidden | Significa que o cliente está autenticado, mas não autorizado — o servidor sabe quem você é, mas você não tem permissão para este recurso. Ao contrário do 401, enviar credenciais novamente não vai ajudar. |
| 404 | Not Found | Significa que a página solicitada não pode ser encontrada no momento, mas pode estar disponível novamente no futuro. |
| 405 | Method Not Allowed | Significa que a requisição foi feita a uma página que usa um método de requisição não suportado para essa página. |
| 406 | Not Acceptable | Significa que o servidor só pode gerar uma resposta que o cliente não aceita. |
| 407 | Proxy Authentication Required | Significa que o cliente deve primeiro se autenticar com o proxy. |
| 408 | Request Timeout | Significa que o servidor expirou aguardando a requisição. |
| 409 | Conflict | Significa que a requisição não pode ser concluída devido a um conflito na requisição. |
| 410 | Gone | Significa que a página solicitada não está mais disponível. |
| 411 | Length Required | Significa que o comprimento do conteúdo não está definido e o servidor não aceitará a requisição sem ele. |
| 412 | Precondition Failed | Significa que uma pré-condição fornecida na requisição foi avaliada como falsa pelo servidor. |
| 413 | Request Entity Too Large | Significa que a entidade da requisição é muito grande e por isso o servidor não aceitará a requisição. |
| 414 | Request-URI Too Long | Significa que a URL é muito longa e por isso o servidor não aceitará a requisição. Isso acontece quando você converte uma requisição POST em GET com muitas informações de consulta. |
| 415 | Unsupported Media Type | Significa que o tipo de mídia não é suportado e por isso o servidor não aceitará a requisição. |
| 416 | Requested Range Not Satisfiable | Significa que o cliente pediu uma parte do arquivo, mas o servidor não consegue fornecer essa parte. |
| 417 | Expectation Failed | Significa que o servidor não consegue atender aos requisitos do campo de cabeçalho de requisição Expect. |
| 418 | I'm a Teapot | Um código de brincadeira da RFC 2324 (o Hyper Text Coffee Pot Control Protocol). Não é um erro real, mas algumas APIs o retornam deliberadamente, então você pode encontrá-lo na prática. |
| 422 | Unprocessable Content | Significa que a requisição estava bem formada, mas contém erros semânticos que impedem seu processamento — comumente retornado por APIs quando dados de formulário ou JSON falham na validação. |
| 429 | Too Many Requests | Significa que o cliente enviou muitas requisições em um determinado período de tempo ("limitação de taxa"). A resposta frequentemente inclui um cabeçalho Retry-After informando quanto tempo aguardar antes de tentar novamente. |
| 451 | Unavailable For Legal Reasons | Significa que o recurso solicitado está indisponível por razões legais, como censura ou uma ordem de remoção (o número faz referência ao romance Fahrenheit 451). |
Códigos não listados aqui (como 419, 420 e vários no intervalo 423–431) são raros, específicos de frameworks ou não padronizados. Alguns — como 421 (Misdirected Request, usado em HTTP/2) e o 451 acima — são padronizados, mas incomuns no trabalho cotidiano.
5xx: Erro do Servidor
| Código de status | Mensagem | Descrição |
|---|---|---|
| 500 | Internal Server Error | É um erro genérico e os usuários recebem esta mensagem quando não há uma mensagem específica mais adequada. |
| 501 | Not Implemented | Significa que o servidor não reconhece o método de requisição ou não tem capacidade de atender à requisição. |
| 502 | Bad Gateway | Significa que um servidor atuando como gateway, proxy reverso ou balanceador de carga recebeu uma resposta inválida do servidor de aplicação upstream — frequentemente porque o backend travou ou retornou saída malformada. |
| 503 | Service Unavailable | Significa que o servidor está temporariamente incapaz de lidar com a requisição (sobrecarregado ou em manutenção). Como o 429, a resposta pode incluir um cabeçalho Retry-After informando clientes e crawlers quando tentar novamente, razão pela qual o 503 é o código seguro para SEO durante indisponibilidade planejada. |
| 504 | Gateway Timeout | Significa que um servidor atuando como gateway, proxy reverso ou balanceador de carga não obteve resposta a tempo do servidor upstream. Aponta para um backend lento ou sem resposta, e não para o próprio proxy. |
| 505 | HTTP Version Not Supported | Significa que a versão do protocolo HTTP usada na requisição não é suportada pelo servidor. |
| 507 | Insufficient Storage | Um código WebDAV que significa que o servidor não consegue armazenar a representação necessária para concluir a requisição (está sem espaço de armazenamento). |
| 508 | Loop Detected | Um código WebDAV que significa que o servidor detectou um loop infinito ao processar a requisição e o encerrou. |
| 511 | Network Authentication Required | Significa que o cliente precisa se autenticar para obter acesso à rede (frequentemente visto por trás de Wi-Fi com portal cativo). |
Capítulos Relacionados
O status que um servidor retorna frequentemente depende da própria requisição. Para se aprofundar, veja:
- Métodos HTTP — GET, POST e afins, que determinam como alguns redirecionamentos (302 vs 307) se comportam.
- Formulários HTML — como envios de formulário acionam requisições que podem retornar 303, 422 ou 429.
- HTML URL (Uniform Resource Locators) — os endereços para os quais redirecionamentos 3xx e respostas 404 apontam.