From 3e65196b57c8a0b3ce210533c88e761a799179e0 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Tue, 26 Aug 2025 00:18:53 +0700 Subject: [PATCH] Normalize all headers into lowercase --- src/main/ua-parser.js | 19 ++++++++++++++----- test/unit/main.js | 8 ++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index 5f2d042..506ca75 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -1390,11 +1390,20 @@ extensions = undefined; } - // Convert Headers object into a plain object - if (headers && typeof headers.append === FUNC_TYPE) { - var kv = {}; - headers.forEach(function (v, k) { kv[k] = v; }); - headers = kv; + if (headers) { + if (typeof headers.append === FUNC_TYPE) { + // Convert Headers object into a plain object + var kv = {}; + headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; }); + headers = kv; + } else { + // Normalize headers field name into lowercase + var normalized = {}; + for (var header in headers) { + normalized[String(header).toLowerCase()] = headers[header]; + } + headers = normalized; + } } if (!(this instanceof UAParser)) { diff --git a/test/unit/main.js b/test/unit/main.js index f9b2ef9..fd1118b 100644 --- a/test/unit/main.js +++ b/test/unit/main.js @@ -381,4 +381,12 @@ describe('Read user-agent data from req.headers', function () { const { browser } = UAParser(reqHeaders); assert.strictEqual(browser.is('Midori'), true); }); + + it('Headers field name should be case insensitive', function () { + const hEaDeRs = { + 'uSeR-aGenT' : 'Midori/0.2.2 (X11; Linux i686; U; en-us) WebKit/531.2+' + }; + const { browser } = UAParser(hEaDeRs); + assert.strictEqual(browser.toString(), "Midori 0.2.2"); + }); });