From 42299172e6bc742af2e549135068004bc6b8e40b Mon Sep 17 00:00:00 2001 From: Khafra Date: Fri, 3 Feb 2023 15:31:31 -0500 Subject: [PATCH] fix(fetch): use semicolon for Cookie header delimiter (#1906) --- lib/fetch/headers.js | 6 +++++- test/fetch/cookies.js | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/fetch/headers.js b/lib/fetch/headers.js index f3955f2a47a..0febd114db5 100644 --- a/lib/fetch/headers.js +++ b/lib/fetch/headers.js @@ -104,7 +104,11 @@ class HeadersList { // 2. Append (name, value) to list. if (exists) { - this[kHeadersMap].set(lowercaseName, { name: exists.name, value: `${exists.value}, ${value}` }) + const delimiter = lowercaseName === 'cookie' ? '; ' : ', ' + this[kHeadersMap].set(lowercaseName, { + name: exists.name, + value: `${exists.value}${delimiter}${value}` + }) } else { this[kHeadersMap].set(lowercaseName, { name, value }) } diff --git a/test/fetch/cookies.js b/test/fetch/cookies.js index d17a8827df5..18b001d8644 100644 --- a/test/fetch/cookies.js +++ b/test/fetch/cookies.js @@ -48,3 +48,22 @@ test('Can send cookies to a server with fetch - issue #1463', async (t) => { t.end() }) + +test('Cookie header is delimited with a semicolon rather than a comma - issue #1905', async (t) => { + t.plan(1) + + const server = createServer((req, res) => { + t.equal(req.headers.cookie, 'FOO=lorem-ipsum-dolor-sit-amet; BAR=the-quick-brown-fox') + res.end() + }).listen(0) + + t.teardown(server.close.bind(server)) + await once(server, 'listening') + + await fetch(`http://localhost:${server.address().port}`, { + headers: [ + ['cookie', 'FOO=lorem-ipsum-dolor-sit-amet'], + ['cookie', 'BAR=the-quick-brown-fox'] + ] + }) +})