01 - Request
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-SinceeIf-None-Match: implementam cache condicional via ETag, economizando banda ao retornar apenas304 Not Modifiedquando 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.