132 códigos de status e cabeçalhos HTTP
O que 404 e 500 realmente significam e o que Content-Type ou Cache-Control fazem, em uma linha.
Códigos de status
1xx Informativos4
Um aviso de progresso; a resposta real vem depois.
2xx Sucesso10
O pedido deu certo.
3xx Redirecionamento7
Vá para outro lugar: o que muda é ser permanente ou temporário.
4xx Erro do cliente29
O problema está no pedido; repeti-lo igual vai falhar de novo.
5xx Erro do servidor11
O problema está no servidor; costuma valer a pena tentar depois.
Cabeçalhos
Cabeçalhos de pedido28
Cabeçalhos que o navegador anexa ao enviar ao servidor.
Cabeçalhos de resposta30
Cabeçalhos que o servidor anexa ao responder.
Nos dois sentidos13
Cabeçalhos que podem aparecer nos dois lados.
Como ler
- O primeiro dígito do código carrega o sentido: 4 aponta para o pedido, 5 para o servidor.
- 404 quer dizer "não existe"; 403, "existe, mas não para você". Trocar os dois atrasa a investigação.
- Nomes de cabeçalho não diferenciam maiúsculas: Content-Type e content-type são o mesmo.
- Problemas de cache e CORS costumam caber numa linha de cabeçalho, visível na aba de rede.
Perguntas frequentes
Q. Qual a diferença entre 404 e 403?
404 diz que não há nada nesse endereço; 403 diz que há, mas você não pode ver. Alguns servidores respondem 404 de propósito para esconder que o recurso existe.
Q. Dá para fazer algo diante de um 500?
Códigos que começam com 5 são problema do servidor, então em geral só resta esperar. Já um 502 ou 504 fica entre dois servidores e costuma passar ao tentar de novo.
Q. Como escolher entre 301 e 302?
Use 301 quando o endereço mudou de vez e 302 quando é temporário. Lembre que navegadores e buscadores guardam um 301 por muito tempo, o que dificulta voltar atrás.
Q. Os nomes de cabeçalho diferenciam maiúsculas?
Não. Content-Type e content-type são o mesmo, e desde o HTTP/2 são enviados em minúsculas por definição.
Q. Por que ocorrem erros de CORS?
Quando a página tenta ler uma resposta de outra origem, o navegador bloqueia a menos que o servidor permita com Access-Control-Allow-Origin. O servidor respondeu: é o navegador que não entrega o corpo ao seu código, e por isso a aba de rede mostra algo que o script não lê.