Extração e Parsing Manual de Headers HTTP no Node.js

Extração e Parsing Manual de Headers HTTP no Node.js

Extrair informações como cookies, tokens Bearer de autorização e o User-Agent diretamente dos cabeçalhos HTTP é fundamental ao construir servidores web nativos ou middlewares customizados. Fazer o parsing manual dessas strings brutas resolve a dependência de frameworks pesados e garante total controle sobre a validação de dados de requisições de entrada.

JavaScript

const http = require('http');

/**
 * Converte a string de Cookie bruta da requisição em um objeto de chave-valor.
 * @param {string} cookieHeader - String de cookies enviada pelo navegador.
 * @returns {Record<string, string>} Objeto com os cookies mapeados.
 */
function parseCookies(cookieHeader = '') {
  return cookieHeader
    .split(';')
    .reduce((cookies, item) => {
      const [chave, valor] = item.split('=').map((c) => c.trim());
      if (chave && valor) cookies[chave] = decodeURIComponent(valor);
      return cookies;
    }, {});
}

/**
 * Extrai o Token Bearer do cabeçalho 'Authorization'.
 * @param {string} authHeader - String do cabeçalho de autorização.
 * @returns {string|null} Token extraído ou null se não formatado corretamente.
 */
function extrairBearerToken(authHeader = '') {
  const [tipo, token] = authHeader.split(' ');
  return tipo === 'Bearer' && token ? token : null;
}

// --- Exemplo Prático de Uso ---
const servidor = http.createServer((req, res) => {
  // Accessa o objeto nativo req.headers (chaves em caixa baixa pelo Node.js)
  const userAgent = req.headers['user-agent'] || 'Desconhecido';
  const cookies = parseCookies(req.headers['cookie']);
  const token = extrairBearerToken(req.headers['authorization']);

  console.log('--- Dados da Requisição Extraídos ---');
  console.log('User-Agent:', userAgent);
  console.log('Cookies Parseados:', cookies);
  console.log('Token de Autorização:', token);

  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({ status: 'sucesso', userAgent, session: cookies.session_id || null, tokenValido: !!token }));
});

servidor.listen(3000, () => {
  console.log('Servidor rodando em http://localhost:3000');
});

Pontos-chave

  • Normalização Automática de Caixas: O Node.js converte automaticamente todas as chaves do objeto req.headers para letras minúsculas (ex: 'authorization', 'user-agent'), evitando falhas de capitalização.
  • Separadores de Cookie: Os cookies na requisição chegam em uma única string separados por ponto e vírgula (;), exigindo a divisão via .split(';') e a decodificação de valores codificados com decodeURIComponent().
  • Padrão Bearer Token: A validação do cabeçalho Authorization checa a presença do prefixo 'Bearer' antes de isolar o hash do token de autenticação JWT/OAuth.
  • Tratamento de Indefinições: Como nem toda requisição envia cookies ou tokens, o uso de valores padrão ('') e encadeamento seguro previne erros de execução de métodos em valores undefined.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *