Referência de códigos HTTP
HTTP Status Reference
Explica cada código de status com o significado na especificação, a cacheabilidade e os erros que as pessoas cometem com ele.
Uma referência pesquisável de todos os códigos de status HTTP: o que cada um significa, qual RFC o define, se um cache pode armazená-lo por padrão e com qual cabeçalho ele precisa ser enviado. A busca casa com o código, o nome e o resumo, e aceita consultas em inglês, coreano, japonês, chinês simplificado e espanhol — não em português.
Procura no código, no nome, no resumo e nas notas, em inglês, coreano, japonês, chinês simplificado e espanhol.
404 Not Found
404Not Found
Não há recurso nenhum nesta URL.
Erro do cliente — A culpa é da requisição. Repeti-la sem mudar nada vai falhar do mesmo jeito.
RFC 9110 §15.5.5Cacheável por padrão
sim
É cacheável por padrão — um fato que surpreende todo mundo na primeira vez que uma CDN continua devolvendo 404 para uma página que já existe.
62 de 62 códigos
| Código | Nome | Significa | Cacheável |
|---|---|---|---|
| 100 | Continue | O cliente pode continuar e enviar o corpo da requisição. | não |
| 101 | Switching Protocols | O servidor está mudando para o protocolo que o cliente pediu. | não |
| 102 | Processing | WebDAV: a requisição está sendo processada. | não |
| 103 | Early Hints | Cabeçalhos preliminares, para o cliente começar a pré-carregar antes da resposta de verdade. | não |
| 200 | OK | A requisição deu certo. | sim |
| 201 | Created | Um recurso novo foi criado. | não |
| 202 | Accepted | A requisição foi aceita, mas ainda não foi executada. | não |
| 203 | Non-Authoritative Information | Um proxy alterou a resposta que está repassando. | sim |
| 204 | No Content | Sucesso, e de propósito não há corpo. | sim |
| 205 | Reset Content | Sucesso; o cliente deveria limpar o formulário que enviou. | não |
| 206 | Partial Content | O intervalo de bytes que foi pedido. | sim |
| 207 | Multi-Status | WebDAV: um corpo XML com um status para cada sub-requisição. | não |
| 208 | Already Reported | WebDAV: este membro já tinha sido enumerado. | não |
| 226 | IM Used | A resposta é o resultado de aplicar manipulações de instância. | não |
| 300 | Multiple Choices | Existem várias representações; escolha uma. | sim |
| 301 | Moved Permanently | O recurso tem uma URL nova, para sempre. | sim |
| 302 | Found | Um redirecionamento temporário. | não |
| 303 | See Other | Vá buscar a outra URL com GET. | não |
| 304 | Not Modified | A cópia em cache ainda serve. | não |
| 305 | Use Proxy | Obsoleto: o cliente deveria usar o proxy indicado. | não |
| 307 | Temporary Redirect | Um redirecionamento temporário que mantém o método. | não |
| 308 | Permanent Redirect | Um redirecionamento permanente que mantém o método. | sim |
| 400 | Bad Request | A requisição está malformada e o servidor não vai processá-la. | não |
| 401 | Unauthorized | É preciso se autenticar, ou as credenciais dadas foram recusadas. | não |
| 402 | Payment Required | Reservado, e nunca recebeu um significado. | não |
| 403 | Forbidden | O servidor entendeu, e se recusa. | não |
| 404 | Not Found | Não há recurso nenhum nesta URL. | sim |
| 405 | Method Not Allowed | A URL existe; este método não se aplica a ela. | sim |
| 406 | Not Acceptable | Nada do que o servidor consegue produzir bate com o cabeçalho `Accept`. | não |
| 407 | Proxy Authentication Required | O proxy quer credenciais. | não |
| 408 | Request Timeout | O cliente demorou demais para enviar a requisição. | não |
| 409 | Conflict | A requisição conflita com o estado atual. | não |
| 410 | Gone | Estava aqui e, de propósito, não vai voltar. | sim |
| 411 | Length Required | É preciso um cabeçalho `Content-Length`. | não |
| 412 | Precondition Failed | Uma condição `If-Match` ou `If-Unmodified-Since` não foi satisfeita. | não |
| 413 | Content Too Large | O corpo é maior do que o servidor aceita. | não |
| 414 | URI Too Long | A URL é mais longa do que o servidor aceita. | sim |
| 415 | Unsupported Media Type | O `Content-Type` do corpo não é um dos que o servidor trata. | não |
| 416 | Range Not Satisfiable | O intervalo pedido cai fora do recurso. | não |
| 417 | Expectation Failed | Não dá para atender ao cabeçalho `Expect`. | não |
| 418 | I'm a teapot | Uma piada de primeiro de abril de 1998 que nunca foi embora. | não |
| 421 | Misdirected Request | Este servidor não consegue produzir uma resposta para esta autoridade. | não |
| 422 | Unprocessable Content | Bem formado, mas semanticamente errado. | não |
| 423 | Locked | WebDAV: o recurso está travado. | não |
| 424 | Failed Dependency | WebDAV: uma requisição anterior da sequência falhou. | não |
| 425 | Too Early | O servidor não quer correr o risco de repetir uma requisição enviada como dados iniciais. | não |
| 426 | Upgrade Required | O cliente precisa trocar de protocolo. | não |
| 428 | Precondition Required | O servidor exige que a requisição seja condicional. | não |
| 429 | Too Many Requests | Limite de requisições atingido. | não |
| 431 | Request Header Fields Too Large | Os cabeçalhos são grandes demais. | não |
| 451 | Unavailable For Legal Reasons | Bloqueado por uma exigência legal. | sim |
| 500 | Internal Server Error | Algo deu errado e o servidor não tem nada mais específico a dizer. | não |
| 501 | Not Implemented | O servidor não suporta esse método de jeito nenhum. | sim |
| 502 | Bad Gateway | Um servidor mais acima mandou algo inválido. | não |
| 503 | Service Unavailable | Temporariamente sem condições de atender à requisição. | não |
| 504 | Gateway Timeout | Um servidor mais acima não respondeu a tempo. | não |
| 505 | HTTP Version Not Supported | A versão do HTTP que vem na requisição não é suportada. | não |
| 506 | Variant Also Negotiates | Uma configuração errada da negociação de conteúdo. | não |
| 507 | Insufficient Storage | WebDAV: não há espaço suficiente para guardar a representação. | não |
| 508 | Loop Detected | WebDAV: um laço infinito durante o processamento. | não |
| 510 | Not Extended | São necessárias mais extensões. | não |
| 511 | Network Authentication Required | Um portal cativo quer que você faça login. | não |
Os que se confundem
- 401 quer dizer “não sei quem você é”: mande credenciais e tente de novo. 403 quer dizer “sei quem você é e a resposta é não”. Se as credenciais eram válidas mas insuficientes, é 403.
- O 400 é para uma requisição que o servidor não consegue ler. O 422 é para uma que ele leu perfeitamente e com a qual não concorda. Dá para repetir um 422 com outros dados; um 400 costuma significar que o próprio cliente está quebrado.
- O primeiro eixo é a permanência (301/308 permanentes, 302/307 temporários) e o segundo é a preservação do método (307/308 mantêm o método, 301/302 historicamente não). Na dúvida, numa API use 307 ou 308.
- Os dois vêm de um proxy, não da sua aplicação. O 502 é “o de cima respondeu besteira ou morreu”; o 504 é “o de cima nunca respondeu”. O segundo é um tempo limite que dá para ajustar; o primeiro é uma queda que você tem que consertar.
- Os dois querem dizer que ali não há nada. O 410 quer dizer, além disso, que aquilo nunca mais volta, e os buscadores agem sobre isso em dias, não em meses.
- O 405 é “nesta URL não, mas veja o que dá” — e precisa mandar um cabeçalho `Allow`. O 501 é “este servidor não implementa esse método em lugar nenhum”.
Como usar
Busque ou filtre por classe
Digite um número, um nome ou o problema que você tem: “gateway”, “rate limit”, “unauthorized”. O índice não tem português, então “autenticação” não encontra nada e “authentication” encontra. Ou restrinja a 4xx e leia de cima a baixo.
Abra um para ver o detalhe
O painel de detalhe dá a especificação que o define, se ele é armazenável em cache por heurística e qualquer cabeçalho que a resposta seja obrigada a carregar: um 405 sem `Allow` e um 301 sem `Location` estão os dois incompletos.
Leia os pares que se confundem
A seção no fim cobre os que são escolhidos errado: 401 contra 403, 302 contra 307, 502 contra 504.
Perguntas frequentes
Qual é a diferença entre 401 e 403?
401 significa que a requisição não tinha credenciais válidas e precisa incluir um cabeçalho `WWW-Authenticate` dizendo como fornecê-las. 403 significa que as credenciais foram entendidas e não bastam. Mandar 401 para um usuário logado sem permissão é o erro comum.
Por que meu CDN está fazendo cache de um 404?
Porque pode. A RFC 9110 §15.1 lista os códigos de status que um cache pode armazenar por heurística quando nada mais diz o contrário, e o 404 está nela. Uma página que você publicou depois continua não encontrada até o cache expirar ou você limpá-lo: mande `Cache-Control: no-store` em um 404 que você espera que vire 200.
302 ou 307?
307 se você quer o método preservado. Historicamente os clientes transformavam um POST em GET diante de um 302 — a especificação não mandava, mas todo mundo fazia —, então 307 e 308 existem para dizer “mesmo método, nova URL” sem ambiguidade.
Posso inventar meu próprio código de status?
Você pode mandar qualquer coisa, e os clientes vão tratar um código desconhecido como o membro genérico da classe dele: um 499 é tratado como um 400. Mas caches, proxies e bibliotecas decidem pela classe, então um código não registrado não te dá nada que um cabeçalho não pudesse carregar melhor.
Pode receber de
Consulta de tipo MIME
MIME Type Lookup
Descobre o tipo MIME de uma extensão ou o inverso, e detecta o tipo pelos bytes de um arquivo.
Inspetor de headers HTTP
HTTP Header Inspector
Busca uma URL e mostra os headers completos da resposta, a cadeia de redirecionamentos, os tempos e a compressão usada.
Formatador e validador de JSON
JSON Formatter & Validator
Formata, minifica e valida JSON, apontando a linha e a coluna exatas de um erro de sintaxe.
Formatador e validador de YAML
YAML Formatter & Validator
Reindenta YAML de forma consistente, valida e aponta os erros de tabulação e âncora que quebram os parsers.
Em seguida
Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.
Cliente HTTP
HTTP Request Builder
Compõe e envia uma requisição GET/POST/PUT/PATCH/DELETE/HEAD com headers e corpo personalizados, e mostra status, headers, corpo e tempo — sem nunca repassar cookies ou Authorization.
Inspetor de headers HTTP
HTTP Header Inspector
Busca uma URL e mostra os headers completos da resposta, a cadeia de redirecionamentos, os tempos e a compressão usada.
Consulta de tipo MIME
MIME Type Lookup
Descobre o tipo MIME de uma extensão ou o inverso, e detecta o tipo pelos bytes de um arquivo.
Codificar e decodificar Base64
Base64 Encoder & Decoder
Codifica e decodifica Base64 e Base64URL para texto ou arquivos, tratando UTF-8 corretamente.
curl para código
curl to Code
Converte um comando curl em fetch, axios, Python requests, Go, PHP ou PowerShell.
Hash de texto
Text Hash
Calcula MD5, SHA-1, SHA-256, SHA-384, SHA-512 e CRC-32 de uma string, com opção de saída em maiúsculas e Base64.