Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

06 - Códigos de Resposta

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Códigos de Resposta HTTP (Status Codes)

Os Códigos de Resposta HTTP (Status Codes) são os sinalizadores técnicos que informam ao Cliente (User-Agent) o resultado de uma solicitação processada pelo Servidor. Padronizados no modelo de três dígitos decodificados pelas RFCs (RFC 7231, RFC 9110 e sucessoras), eles permitem que o navegador decida automaticamente como agir: exibir o conteúdo, redirecionar o usuário, solicitar autenticação ou exibir uma mensagem de erro crítica. Compreender a semântica de cada categoria de status é fundamental para arquitetos de sistemas, desenvolvedores e profissionais de Cyber Security.


1. Categorização Técnica das Famílias de Códigos

Os códigos de resposta são divididos em cinco classes, identificadas pelo primeiro dígito (1 a 5).

1xx: Respostas Informativas (Informational)

Indica que a requisição foi recebida e o processo ainda está em andamento. Introduzido no HTTP/1.1, raramente usado em servidores web modernos.

Código Reason Phrase Aplicação
100 Continue Cliente envia headers primeiro para perguntar se pode enviar body
101 Switching Protocols Upgrade para WebSocket, HTTP/2
102 Processing WebDAV — processamento ainda em curso
103 Early Hints Permite enviar hints antes da resposta final

2xx: Sucesso (Success)

Indica que a ação solicitada pelo cliente foi recebida, compreendida e aceita com êxito pelo servidor.

Código Reason Phrase Quando Usar
200 OK Sucesso genérico (GET, POST, PUT)
201 Created Recurso criado com sucesso (POST)
202 Accepted Requisição aceita para processamento assíncrono
204 No Content Sucesso sem corpo de resposta (DELETE)
206 Partial Content Range requests (streaming, downloads resumíveis)

3xx: Redirecionamento (Redirection)

Informa que o cliente precisa realizar uma ação adicional para completar a requisição.

Código Reason Phrase Comportamento
301 Moved Permanently Redirecionamento definitivo (SEO link juice)
302 Found Redirecionamento temporário
303 See Other Redirecionamento para outro URI via GET
304 Not Modified Resposta a If-Modified-Since / If-None-Match
307 Temporary Redirect Preserva método HTTP original
308 Permanent Redirect Como 301, mas preserva método e body

A distinção crítica entre 301 e 307 (preservação de método) é frequentemente mal compreendida: 301 permite que o navegador converta um POST em GET, enquanto 307 exige que o método original seja mantido.

4xx: Erros do Cliente (Client Errors)

Atribui a falha da requisição a algum erro por parte do cliente (ex: sintaxe incorreta, recurso inexistente, falta de permissão).

Código Reason Phrase Causa Comum
400 Bad Request Sintaxe HTTP inválida
401 Unauthorized Falta de autenticação (header Authorization)
403 Forbidden Autenticado mas sem permissão
404 Not Found Recurso não existe
405 Method Not Allowed Método não permitido para o recurso
408 Request Timeout Cliente não enviou dados a tempo
409 Conflict Estado conflitante (PUT em versão desatualizada)
410 Gone Recurso removido permanentemente
413 Payload Too Large Body excede limite do servidor
414 URI Too Long URL acima do limite
415 Unsupported Media Type Content-Type não suportado
422 Unprocessable Entity Sintaxe correta, mas semântica inválida
429 Too Many Requests Rate limiting excedido

5xx: Erros do Servidor (Server Errors)

Indica que o servidor falhou ao tentar processar uma requisição aparentemente válida por motivos internos de infraestrutura ou aplicação.

Código Reason Phrase Causa Comum
500 Internal Server Error Erro genérico de backend
501 Not Implemented Servidor não suporta o método
502 Bad Gateway Proxy recebeu resposta inválida do upstream
503 Service Unavailable Sobrecarga ou manutenção
504 Gateway Timeout Upstream não respondeu a tempo
505 HTTP Version Not Supported Versão HTTP não suportada
511 Network Authentication Required Portal cativo (Wi-Fi público)

2. Semântica de Comunicação e Resposta Padrão

O servidor não envia apenas o número do código, mas também uma Reason Phrase (Frase de Motivo), que é uma breve descrição em texto legível por humanos (ex: 200 OK, 404 Not Found). Embora a frase possa ser alterada pelo administrador, o número de três dígitos é o padrão técnico imutável que as máquinas utilizam para o controle de fluxo.

Estrutura Completa da Response

HTTP/1.1 200 OK
Date: Wed, 21 Oct 2024 07:28:00 GMT
Server: nginx/1.25.3
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Cache-Control: max-age=3600
Connection: keep-alive

<html>...</html>

A primeira linha contém versão HTTP, código de status e reason phrase. Em HTTP/2, o código é transportado no frame HEADERS com pseudo-header :status.


3. Códigos Customizados e Não-Oficiais

Embora não façam parte da RFC 9110, alguns códigos se popularizaram informalmente:

  • 418 I'm a teapot: Brincadeira do RFC 2324 (Hyper Text Coffee Pot Control Protocol). Cloudflare e Google retornam em alguns endpoints.
  • 420 Enhance Your Calm: Twitter antigo (agora usa 429).
  • 451 Unavailable For Legal Reasons: Padronizado no RFC 7725, usado para censura governamental.
  • 520 Unknown Error: Cloudflare, erro não-classificado de origem.
  • 521 Web Server Down / 522 Connection Timed Out: Cloudflare específico.

4. Perspectiva de Cyber Security e Status Codes

Para um analista de Cyber Security, os códigos de resposta são fontes valiosas de informação e pontos de auditoria.

Vazamento de Informações via Erros (500 e 403)

Servidores mal configurados que retornam erros detalhados (ex: 500 Internal Server Error exibindo o stack-trace do código-fonte ou o banco de dados utilizado) entregam de bandeja para o atacante a arquitetura interna da organização.

  • Recomendação: Implementar páginas de erro customizadas que informem apenas o erro genérico para o usuário final, mantendo os detalhes técnicos exclusivamente nos logs de auditoria privados.

Reconhecimento de Ativos via 404 e 403

Atacantes utilizam ferramentas de "fuzzing" (ex: ffuf, dirb, gobuster) para testar milhares de URLs. Uma resposta 403 Forbidden indica que o recurso existe, mas está protegido, enquanto um 404 Not Found indica a ausência total. Esta distinção é usada para "mapear" diretórios administrativos ocultos em servidores vulneráveis.

Mitigação: Retornar 404 em vez de 403 para recursos protegidos não-publicados (camuflagem), ou usar honeypots com 200 fake para confundir varredores.

Defesa Proativa contra DDoS

O código 429 Too Many Requests é a ferramenta de defesa definitiva contra robôs e ataques de força bruta. Ao retornar este código junto com filtros de Rate Limiting (Limitação de Taxa), o servidor web preserva seus recursos de CPU e Banco de Dados contra exaustão maliciosa.

Cabeçalho Retry-After informa quanto tempo o cliente deve esperar:

HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{"error": "rate_limit_exceeded"}

Detecção de Credential Stuffing

Picos de 401 Unauthorized provenientes de um mesmo IP indicam ataque de força bruta ou credential stuffing. Ferramentas SIEM (Splunk, Elastic, QRadar) correlacionam essas respostas com feeds de ameaças (TOR exit nodes, IPs maliciosos conhecidos).


5. Auditoria Técnica e Diagnóstico de Resposta

Monitorar a distribuição dos códigos de resposta permite identificar rapidamente falhas de infraestrutura:

# Inspecionando o codigo de status retornado sem carregar o corpo
curl -I https://www.meusite.com.br

# Contabilizando os erros 4xx e 5xx nos logs de acesso para identificar picos de falha
grep -c " 404 " /var/log/nginx/access.log
grep -c " 500 " /var/log/nginx/access.log

# Distribuicao completa por codigo de status (top 10)
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

# Percentual de erros 5xx em um dia
total=$(wc -l < /var/log/nginx/access.log)
errors=$(grep -c " 5[0-9][0-9] " /var/log/nginx/access.log)
echo "scale=2; $errors * 100 / $total" | bc

SLOs Típicos Baseados em Status Codes

SLO Meta Status Codes
Disponibilidade 99,9% 200, 201, 204, 301, 302
Erro do cliente < 5% 4xx
Erro do servidor < 0,1% 5xx
Latência p95 < 500 ms Time to first byte

6. Comportamento dos Navegadores

Diferentes User-Agents tratam códigos de status de forma específica:

Código Comportamento Chrome Comportamento Firefox
301/308 Atualiza URL na barra Idem
302/307 Mantém método original (307) Idem
304 Usa cache local Idem
401 Solicita credenciais (Basic) Idem
403 Exibe página de erro Idem
404 Exibe página customizada do servidor Idem
500 Página genérica de erro Idem

7. Conclusão: A Resposta da Máquina

Os Códigos de Resposta HTTP são os sinais de trânsito que organizam o fluxo de informações na Internet. Sua clareza semântica permite que navegadores e servidores cooperem para oferecer experiências rápidas e seguras. Dominar a classificação das famílias de status (1xx informativo, 2xx sucesso, 3xx redirecionamento, 4xx erro do cliente, 5xx erro do servidor), gerenciar com precisão as permissões de acesso (403 vs 404) e monitorar continuamente os picos de erros de servidor são as bases para garantir que a infraestrutura web seja não apenas funcional, mas auditável, observável e resiliente a incidentes de segurança cibernética em escala global.