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

01 - Request

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

Requisição HTTP (HTTP Request)

A Requisição HTTP (HTTP Request) é o ponto de ignição de toda e qualquer comunicação na World Wide Web. Trata-se da mensagem técnica enviada pelo cliente (User-Agent) ao servidor de origem, expressando uma ação específica sobre um recurso identificado por uma URI. Uma requisição bem estruturada segue regras rigorosas de sintaxe definidas na RFC 7230 (HTTP/1.1) e na RFC 9110 (HTTP Semantics), garantindo que servidores, proxies e firewalls de aplicação (WAF) consigam interpretar, rotear e autorizar o pedido de acesso de forma precisa e segura.


1. Anatomia Detalhada da Mensagem de Requisição

Uma requisição HTTP é composta por três partes fundamentais, separadas por quebras de linha no formato CRLF (\r\n):

GET /index.html HTTP/1.1
Host: www.exemplo.com.br
User-Agent: Mozilla/5.0 (X11; Linux x86_64)
Accept: text/html,application/xhtml+xml
Accept-Language: pt-BR,pt;q=0.9
Connection: keep-alive
Cookie: SID=31d4b96c8a6f5c2e

1.1 Linha de Requisição (Request-Line)

É a primeira linha da mensagem e define o "o quê", "onde" e "como" da transação:

Campo Descrição Exemplo
Método Ação desejada sobre o recurso GET, POST, PUT, DELETE
Request-URI Caminho absoluto do recurso /docs/manual.pdf
Versão Norma utilizada HTTP/1.1 ou HTTP/2.0

Exemplo completo: GET /index.html HTTP/1.1

1.2 Cabeçalhos de Requisição (Request Headers)

São metadados de chave-valor que fornecem o contexto necessário para que o servidor processe a requisição corretamente. Os mais relevantes:

  • Host: nome de domínio do servidor (obrigatório desde o HTTP/1.1). Permite que um único IP hospede múltiplos sites (Virtual Hosting).
  • User-Agent: identifica o software do cliente (Chrome, Firefox, Bot do Google).
  • Accept: informa quais tipos de dados o cliente consegue processar (text/html, application/json).
  • Accept-Encoding: lista algoritmos de compressão suportados (gzip, br, zstd).
  • Authorization: transporta credenciais (Basic, Bearer JWT, Digest).
  • Cookie: transporta os dados de sessão do usuário de volta ao servidor.

1.3 Corpo da Requisição (Request Body)

Opcional, utilizado principalmente em métodos como POST, PUT e PATCH. Contém os dados reais que estão sendo enviados ao servidor (upload de imagem, campos de formulário, payload JSON). O tamanho é declarado pelo cabeçalho Content-Length ou, em streaming, pelo mecanismo Transfer-Encoding: chunked.


2. O Cabeçalho Host e o Virtual Hosting

Antes do HTTP/1.1, as requisições não informavam o nome do domínio, apenas o caminho do arquivo. Isso exigia um endereço IP exclusivo para cada site na Internet, inviabilizando economicamente a hospedagem compartilhada.

A Solução: Obrigatoriedade do Host

A RFC 7230 tornou o cabeçalho Host obrigatório em todas as requisições HTTP/1.1. Com isso, um único servidor web escutando em um IP consegue hospedar milhares de sites, decidindo qual DocumentRoot servir com base nesse cabeçalho. Isso possibilitou a explosão da economia de hospedagem compartilhada (shared hosting) e o surgimento de plataformas como cPanel e Plesk.

Impacto no TLS (SNI)

A evolução do conceito ocorreu com o Server Name Indication (SNI), definido na RFC 6066, que permite ao cliente enviar o nome do host já durante o handshake TLS, antes da requisição HTTP em si. Sem SNI, seria impossível servir múltiplos certificados HTTPS em um mesmo IP:porta.


3. Estados de Conexão e Metadados do Cliente

A requisição carrega informações que moldam a eficiência da resposta e o ciclo de vida da conexão:

  • Connection: keep-alive: solicita ao servidor que mantenha o túnel TCP aberto para economizar tempo em novas requisições (evita o custo de 3-way handshake repetido).
  • Referer: indica de qual página o usuário veio, essencial para análises de tráfego e proteção contra ataques CSRF (Cross-Site Request Forgery).
  • If-Modified-Since e If-None-Match: implementam cache condicional via ETag, economizando banda ao retornar apenas 304 Not Modified quando o recurso não mudou.
  • Range: permite solicitação de partes específicas de um recurso (downloads resumíveis, streaming de mídia).

4. HTTP/2 e HTTP/3: Nova Estrutura de Requisição

Em HTTP/2 (RFC 7540), a estrutura textual da requisição HTTP/1.1 foi substituída por frames binários. Cada requisição vira um stream multiplexado dentro de uma única conexão TCP, eliminando o problema de head-of-line blocking. Os cabeçalhos são comprimidos com HPACK, reduzindo drasticamente o overhead.

Em HTTP/3 (RFC 9114), o transporte TCP foi substituído pelo QUIC (sobre UDP), permitindo troca de redes (Wi-Fi para 4G) sem queda de conexão e zero round-trip time (0-RTT) em conexões repetidas.


5. Perspectiva de Cyber Security e Análise de Requisição

Para um analista de Cyber Security, a requisição é o "pacote de entrada" que deve ser inspecionado em busca de ameaças.

5.1 Buffer Overflow e URI Too Long

Atacantes tentam enviar linhas de requisição absurdamente longas (milhares de caracteres) na tentativa de estourar buffers de memória em servidores web desatualizados. O servidor deve ser configurado para rejeitar requisições de tamanho anômalo imediatamente (LimitRequestLine e LimitRequestFieldSize no Apache, large_client_header_buffers no Nginx).

5.2 HTTP Request Smuggling

Uma técnica de ataque avançada (CVE-2018-8004, CVE-2021-26291) que explora divergências na forma como dispositivos de rede contam o tamanho da requisição. Um atacante "esconde" uma segunda requisição dentro de uma primeira, explorando ambiguidades entre Content-Length e Transfer-Encoding: chunked. O proxy vê apenas uma requisição, mas o servidor de backend vê duas, permitindo ao atacante processar a segunda requisição sob a sessão de outro usuário (XSS ou bypass de autenticação).

Proteção: padronizar interpretação de RFCs entre proxy e backend; rejeitar requisições que contenham ambos os cabeçalhos de tamanho simultaneamente.

5.3 Cross-Site Request Forgery (CSRF)

Explora requisições POST legítimas que o navegador envia automaticamente junto com cookies de sessão. Mitigação via tokens anti-CSRF (synchronizer pattern) ou cabeçalho SameSite=Lax/Strict no Set-Cookie.


6. Auditoria Técnica e Diagnóstico de Requisições

Administradores de sistemas utilizam o monitoramento de requisições para detectar falhas e tentativas de invasão:

# Inspecionando a requisição bruta enviada pelo navegador via curl
curl -v https://www.seusite.com.br

# Monitorando requisições em tempo real com tcpdump (Porta 80)
# Identifica quais métodos e caminhos estão sendo solicitados por IPs suspeitos
sudo tcpdump -i any -A port 80 | grep "GET\|POST"

# Reproduzindo uma requisição manualmente para debug de WAF
curl -X POST -H "Content-Type: application/json" \
     -d '{"user":"admin","pass":"123"}' \
     https://api.exemplo.com/login

# Inspecionando metadados via tshark (Wireshark CLI)
tshark -i eth0 -Y "http.request" -T fields \
   -e ip.src -e http.request.method -e http.host -e http.request.uri

Sinais de Alerta em Logs

Padrão Possível Ameaça
GET /etc/passwd HTTP/1.1 Path Traversal / LFI
GET /?id=1' OR '1'='1 HTTP/1.1 SQL Injection
GET /../../../../var/log/auth.log Directory Traversal
User-Agent: sqlmap/1.5 Scanner automatizado
500 requisições/segundo de mesmo IP Brute Force / DoS

7. Resumo Técnico

Componente Obrigatório RFC de Referência
Linha de Requisição Sim RFC 9110
Host Sim (HTTP/1.1+) RFC 7230
Content-Length Condicional RFC 9110
User-Agent Não (recomendado) RFC 9110
Authorization Condicional RFC 7616, RFC 6750

8. Conclusão

A Requisição HTTP é a expressão da vontade do usuário na rede digital. Sem a sua estrutura clara, rica em metadados e rigorosa na sintaxe, a Internet seria incapaz de oferecer serviços personalizados e seguros. Dominar a anatomia da Request-Line, gerenciar com precisão os cabeçalhos de contexto (Host, Authorization, Cookie) e proteger o servidor contra manipulações estruturais (Request Smuggling, Buffer Overflow, CSRF) são competências fundamentais para garantir que a infraestrutura web seja rápida, previsível e resistente a tentativas de fraude e sequestro de sessão.