diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index b4c93ebc12..84435874e3 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -226,6 +226,7 @@ export abstract class FetchRequest extends SdkObject { postData = undefined; delete headers[`content-encoding`]; delete headers[`content-language`]; + delete headers[`content-length`]; delete headers[`content-location`]; delete headers[`content-type`]; } diff --git a/tests/global-fetch.spec.ts b/tests/global-fetch.spec.ts index a2b6999026..460ebf439f 100644 --- a/tests/global-fetch.spec.ts +++ b/tests/global-fetch.spec.ts @@ -210,3 +210,21 @@ it('should abort redirected requests when context is disposed', async ({ playwri expect(result.message).toContain('Request context disposed'); await connectionClosed; }); + +it('should remove content-length from reidrected post requests', async ({ playwright, server }) => { + server.setRedirect('/redirect', '/empty.html'); + const request = await playwright.request.newContext(); + const [result, req1, req2] = await Promise.all([ + request.post(server.PREFIX + '/redirect', { + data: { + 'foo': 'bar' + } + }), + server.waitForRequest('/redirect'), + server.waitForRequest('/empty.html') + ]); + expect(result.status()).toBe(200); + expect(req1.headers['content-length']).toBe('13'); + expect(req2.headers['content-length']).toBe(undefined); + await request.dispose(); +});