diff --git a/lib/web/cache/cache.js b/lib/web/cache/cache.js index 5bfd94b3281..6a1d16fa28b 100644 --- a/lib/web/cache/cache.js +++ b/lib/web/cache/cache.js @@ -514,6 +514,7 @@ class Cache { for (const request of requests) { const requestObject = fromInnerRequest( request, + undefined, new AbortController().signal, 'immutable' ) diff --git a/lib/web/fetch/request.js b/lib/web/fetch/request.js index a91ce351bed..92c9ee501fb 100644 --- a/lib/web/fetch/request.js +++ b/lib/web/fetch/request.js @@ -775,7 +775,7 @@ class Request { } // 4. Return clonedRequestObject. - return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])) + return fromInnerRequest(clonedRequest, this[kDispatcher], ac.signal, getHeadersGuard(this[kHeaders])) } [nodeUtil.inspect.custom] (depth, options) { @@ -875,13 +875,15 @@ function cloneRequest (request) { /** * @see https://fetch.spec.whatwg.org/#request-create * @param {any} innerRequest + * @param {import('../../dispatcher/agent')} dispatcher * @param {AbortSignal} signal * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard * @returns {Request} */ -function fromInnerRequest (innerRequest, signal, guard) { +function fromInnerRequest (innerRequest, dispatcher, signal, guard) { const request = new Request(kConstruct) request[kState] = innerRequest + request[kDispatcher] = dispatcher request[kSignal] = signal request[kHeaders] = new Headers(kConstruct) setHeadersList(request[kHeaders], innerRequest.headersList) diff --git a/test/fetch/issue-3630.js b/test/fetch/issue-3630.js new file mode 100644 index 00000000000..d03b7185fa5 --- /dev/null +++ b/test/fetch/issue-3630.js @@ -0,0 +1,12 @@ +'use strict' + +const { test } = require('node:test') +const assert = require('node:assert') +const { Request, Agent } = require('../..') +const { kDispatcher } = require('../../lib/web/fetch/symbols') + +test('Cloned request should inherit its dispatcher', () => { + const agent = new Agent() + const request = new Request('https://a', { dispatcher: agent }) + assert.strictEqual(request[kDispatcher], agent) +})