Entenda os códigos de status HTTP, como funcionam as requisições web e o que cada código significa para suas aplicações.
HTTP (HyperText Transfer Protocol) é o protocolo usado para transferir dados na web. Toda vez que você acessa um site, seu navegador faz requisições HTTP.
A comunicação HTTP funciona em pares: o cliente faz uma requisição (request) e o servidor retorna uma resposta (response).
Cada resposta inclui um código de status de 3 dígitos que indica se a requisição foi bem-sucedida, redirecionada, ou se houve erro.
HTTPS é a versão segura do HTTP, usando criptografia SSL/TLS para proteger os dados transferidos entre cliente e servidor.
Os métodos HTTP indicam a ação desejada sobre um recurso. Cada método tem uma semântica específica.
Solicita dados de um recurso. Não deve modificar dados.
GET /api/users/123
Envia dados para criar um novo recurso no servidor.
POST /api/users { "name": "João", "email": "joao@email.com"
}
Substitui completamente um recurso existente.
PUT /api/users/123 { "name": "João Silva", "email":
"joao@email.com" }
Atualiza parcialmente um recurso existente.
PATCH /api/users/123 { "name": "João Carlos" }
Remove um recurso do servidor.
DELETE /api/users/123
Requisição recebida, processamento continua
Requisição recebida, entendida e aceita
Ação adicional necessária para completar
Requisição contém erro de sintaxe ou não pode ser atendida
Servidor falhou ao processar requisição válida
O servidor recebeu os headers e o cliente deve continuar enviando o body da requisição.
O servidor está mudando de protocolo conforme solicitado pelo cliente (ex: HTTP para WebSocket).
O servidor está processando a requisição, mas ainda não há resposta disponível.
Requisição bem-sucedida. O significado depende do método HTTP usado.
Requisição bem-sucedida e um novo recurso foi criado.
Requisição aceita para processamento, mas ainda não concluída.
A resposta foi modificada por um proxy ou servidor intermediário.
Requisição bem-sucedida, mas sem conteúdo para retornar.
O servidor está entregando apenas parte do recurso (usado em downloads resumíveis).
Existem múltiplas opções de recurso que o cliente pode escolher.
O recurso foi movido permanentemente para uma nova URL. Bom para SEO.
Location: https://novo-site.com/pagina
O recurso está temporariamente em outra URL.
O cliente deve fazer GET em outra URL para obter o recurso.
O recurso não foi modificado desde a última requisição. Use o cache.
Como 302, mas garante que o método HTTP não seja alterado.
Como 301, mas garante que o método HTTP não seja alterado.
A requisição é inválida ou malformada. Verifique os dados enviados.
Autenticação é necessária. O cliente não está autenticado.
Reservado para uso futuro. Usado por algumas APIs para indicar pagamento necessário.
O servidor entende a requisição, mas se recusa a autorizá-la.
O recurso solicitado não existe no servidor.
O método HTTP usado não é permitido para este recurso.
O servidor fechou a conexão porque a requisição demorou demais.
Conflito com o estado atual do recurso (ex: email já cadastrado).
O recurso existiu, mas foi permanentemente removido.
O formato do payload não é suportado (ex: enviou XML, mas só aceita JSON).
A sintaxe está correta, mas os dados são semanticamente inválidos.
O cliente enviou muitas requisições em pouco tempo (rate limiting).
Erro genérico do servidor. Algo deu errado, mas não sabemos exatamente o quê.
O servidor não suporta a funcionalidade necessária para atender a requisição.
O servidor, atuando como gateway/proxy, recebeu resposta inválida do servidor upstream.
O servidor está temporariamente indisponível (manutenção ou sobrecarga).
Retry-After: 3600
O servidor, atuando como gateway/proxy, não recebeu resposta a tempo do servidor upstream.
O servidor não suporta a versão HTTP usada na requisição.
Authorization |
Token de autenticação |
Content-Type |
Tipo de dado enviado (application/json) |
Accept |
Tipos de resposta aceitos |
User-Agent |
Informações do cliente/browser |
Cache-Control |
Diretivas de cache |
Content-Type |
Tipo do conteúdo retornado |
Content-Length |
Tamanho do body em bytes |
Set-Cookie |
Define cookies no cliente |
Location |
URL para redirecionamento |
Access-Control-* |
Headers CORS |
// GET Request fetch('https://api.exemplo.com/users')
.then(response => { console.log(response.status); // 200 return
response.json(); }) .then(data => console.log(data))
.catch(error => console.error(error)); // POST Request
fetch('https://api.exemplo.com/users', { method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization':
'Bearer token123' }, body: JSON.stringify({ name: 'João', email:
'joao@email.com' }) });
async function fetchData(url) { const response = await
fetch(url); if (response.status === 200) { return
response.json(); } if (response.status === 401) { throw new
Error('Não autorizado'); } if (response.status === 404) { throw
new Error('Recurso não encontrado'); } if (response.status >=
500) { throw new Error('Erro no servidor'); } }