W3docs

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:

Perigo

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()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.

Informação

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 statusMensagemDescrição
100ContinueSignifica que o servidor recebeu os cabeçalhos da requisição e o cliente deve continuar a enviar o corpo da requisição.
101Switching ProtocolsSignifica que o cliente, que fez a requisição, pediu ao servidor para mudar de protocolo (por exemplo, para atualizar para uma conexão WebSocket).
102ProcessingUm 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.
103Early HintsDefinido 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 statusMensagemDescrição
200OKSignifica que a requisição foi aceita. É a resposta padrão para requisições HTTP bem-sucedidas.
201CreatedSignifica que a requisição foi atendida e um novo recurso foi criado.
202AcceptedSignifica que a requisição foi aceita para processamento, mas o processamento ainda está em andamento.
203Non-Authoritative InformationSignifica que a requisição foi processada com sucesso, mas está retornando informações que podem ser de outra fonte.
204No ContentSignifica que a requisição foi processada com sucesso, mas não está retornando nenhum conteúdo.
205Reset ContentSignifica 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.
206Partial ContentSignifica 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 statusMensagemDescrição
300Multiple ChoicesIndica múltiplas opções para o recurso que o cliente pode seguir.
301Moved PermanentlySignifica 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.
302FoundSignifica 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.
303See OtherSignifica 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.
304Not ModifiedSignifica 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.
307Temporary RedirectSignifica 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).
308Permanent RedirectSignifica 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 statusMensagemDescrição
400Bad RequestSignifica que a requisição não pode ser atendida devido a sintaxe incorreta ou dados inválidos.
401UnauthorizedSignifica 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".)
402Payment RequiredEstá reservado para uso futuro.
403ForbiddenSignifica 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.
404Not FoundSignifica que a página solicitada não pode ser encontrada no momento, mas pode estar disponível novamente no futuro.
405Method Not AllowedSignifica 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.
406Not AcceptableSignifica que o servidor só pode gerar uma resposta que o cliente não aceita.
407Proxy Authentication RequiredSignifica que o cliente deve primeiro se autenticar com o proxy.
408Request TimeoutSignifica que o servidor expirou aguardando a requisição.
409ConflictSignifica que a requisição não pode ser concluída devido a um conflito na requisição.
410GoneSignifica que a página solicitada não está mais disponível.
411Length RequiredSignifica que o comprimento do conteúdo não está definido e o servidor não aceitará a requisição sem ele.
412Precondition FailedSignifica que uma pré-condição fornecida na requisição foi avaliada como falsa pelo servidor.
413Request Entity Too LargeSignifica que a entidade da requisição é muito grande e por isso o servidor não aceitará a requisição.
414Request-URI Too LongSignifica 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.
415Unsupported Media TypeSignifica que o tipo de mídia não é suportado e por isso o servidor não aceitará a requisição.
416Requested Range Not SatisfiableSignifica que o cliente pediu uma parte do arquivo, mas o servidor não consegue fornecer essa parte.
417Expectation FailedSignifica que o servidor não consegue atender aos requisitos do campo de cabeçalho de requisição Expect.
418I'm a TeapotUm 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.
422Unprocessable ContentSignifica 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.
429Too Many RequestsSignifica 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.
451Unavailable For Legal ReasonsSignifica 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 statusMensagemDescrição
500Internal Server ErrorÉ um erro genérico e os usuários recebem esta mensagem quando não há uma mensagem específica mais adequada.
501Not ImplementedSignifica que o servidor não reconhece o método de requisição ou não tem capacidade de atender à requisição.
502Bad GatewaySignifica 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.
503Service UnavailableSignifica 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.
504Gateway TimeoutSignifica 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.
505HTTP Version Not SupportedSignifica que a versão do protocolo HTTP usada na requisição não é suportada pelo servidor.
507Insufficient StorageUm 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).
508Loop DetectedUm código WebDAV que significa que o servidor detectou um loop infinito ao processar a requisição e o encerrou.
511Network Authentication RequiredSignifica 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.

Prática

Prática
Um usuário autenticado solicita uma página que não tem permissão de ver. Qual código de status o servidor deve retornar?
Um usuário autenticado solicita uma página que não tem permissão de ver. Qual código de status o servidor deve retornar?
Prática
Você move permanentemente uma página para uma nova URL e quer que os mecanismos de busca transfiram os sinais de ranking para o novo endereço. Qual código de redirecionamento deve usar?
Você move permanentemente uma página para uma nova URL e quer que os mecanismos de busca transfiram os sinais de ranking para o novo endereço. Qual código de redirecionamento deve usar?
Prática
Um POST de formulário é bem-sucedido e o servidor quer dizer ao navegador para limpar os campos do formulário sem enviar nenhum novo conteúdo de página. Qual código de status se encaixa melhor?
Um POST de formulário é bem-sucedido e o servidor quer dizer ao navegador para limpar os campos do formulário sem enviar nenhum novo conteúdo de página. Qual código de status se encaixa melhor?
Was this page helpful?