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.headerspara 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 comdecodeURIComponent(). - Padrão Bearer Token: A validação do cabeçalho
Authorizationcheca 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 valoresundefined.
