diff --git a/lib/fetch/headers.js b/lib/fetch/headers.js index ea3b9a14a43..5093ef8726f 100644 --- a/lib/fetch/headers.js +++ b/lib/fetch/headers.js @@ -75,6 +75,7 @@ class HeadersList { if (init instanceof HeadersList) { this[kHeadersMap] = new Map(init[kHeadersMap]) this[kHeadersSortedMap] = init[kHeadersSortedMap] + this.cookies = init.cookies } else { this[kHeadersMap] = new Map(init) this[kHeadersSortedMap] = null diff --git a/test/fetch/headers.js b/test/fetch/headers.js index 19beb98bdba..b91609dc383 100644 --- a/test/fetch/headers.js +++ b/test/fetch/headers.js @@ -3,6 +3,9 @@ const tap = require('tap') const { Headers, fill } = require('../../lib/fetch/headers') const { kGuard } = require('../../lib/fetch/symbols') +const { once } = require('events') +const { fetch } = require('../..') +const { createServer } = require('http') tap.test('Headers initialization', t => { t.plan(8) @@ -692,5 +695,22 @@ tap.test('Headers.prototype.getSetCookie', (t) => { t.end() }) + // https://github.com/nodejs/undici/issues/1935 + t.test('When Headers are cloned, so are the cookies', async (t) => { + const server = createServer((req, res) => { + res.setHeader('Set-Cookie', 'test=onetwo') + res.end('Hello World!') + }).listen(0) + + await once(server, 'listening') + t.teardown(server.close.bind(server)) + + const res = await fetch(`http://localhost:${server.address().port}`) + const entries = Object.fromEntries(res.headers.entries()) + + t.same(res.headers.getSetCookie(), ['test=onetwo']) + t.ok('set-cookie' in entries) + }) + t.end() })