diff --git a/src/proxy/index.ts b/src/proxy/index.ts index b2c09d4e9..0bde5dbc0 100644 --- a/src/proxy/index.ts +++ b/src/proxy/index.ts @@ -211,7 +211,7 @@ export default class Proxy extends Router { const windowId = refererDest && refererDest.windowId || void 0; if (session) { - session.options.referer = referer || session.options.referer; + if (!isIframe) session.options.referer = referer || session.options.referer; res.setHeader(BUILTIN_HEADERS.contentType, 'application/x-javascript'); addPreventCachingHeaders(res); diff --git a/test/server/proxy/regression-test.js b/test/server/proxy/regression-test.js index 40b179fb0..97fa3f333 100644 --- a/test/server/proxy/regression-test.js +++ b/test/server/proxy/regression-test.js @@ -1591,6 +1591,33 @@ describe('Regression', () => { }); }); + it('Should not alter referer after the iframe task (GH-7376)', async () => { + session.getPayloadScript = async () => 'PayloadScript'; + session.getIframePayloadScript = async () => 'IframePayloadScript'; + + const expectedReferer = getProxyUrl('http://example.com/'); + + await request({ + headers: { + referer: proxy.openSession('http://example.com', session), + }, + url: 'http://localhost:1836/task.js', + resolveWithFullResponse: true, + }); + + expect(session.options.referer).eql(expectedReferer); + + await request({ + headers: { + referer: proxy.openSession('http://iframe.example.com', session), + }, + url: 'http://localhost:1836/iframe-task.js', + resolveWithFullResponse: true, + }); + + expect(session.options.referer).eql(expectedReferer); + }); + it('Should use `referrer` from the session options if it is not existed in request (GH-6295)', () => { const req = { url: getProxyUrl('http://example.com/'),