From f335062a28c35829466847e89ce0e8367bf3f9b5 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Sat, 3 Jan 2026 14:03:37 +0000 Subject: [PATCH 1/3] fix(http-client): fix relative redirects --- packages/http-client/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client/src/index.ts b/packages/http-client/src/index.ts index 5691e89137..aa2b688dbf 100644 --- a/packages/http-client/src/index.ts +++ b/packages/http-client/src/index.ts @@ -402,7 +402,7 @@ export class HttpClient { // if there's no location to redirect to, we won't break } - const parsedRedirectUrl = new URL(redirectUrl) + const parsedRedirectUrl = new URL(redirectUrl, info.parsedUrl) if ( parsedUrl.protocol === 'https:' && parsedUrl.protocol !== parsedRedirectUrl.protocol && From 244c2740209b994511caa2766f33b8025ebb4885 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Sat, 3 Jan 2026 14:04:50 +0000 Subject: [PATCH 2/3] tests(http-client): add relative redirect case --- packages/http-client/__tests__/basics.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/http-client/__tests__/basics.test.ts b/packages/http-client/__tests__/basics.test.ts index 254a8ec507..459d773bcf 100644 --- a/packages/http-client/__tests__/basics.test.ts +++ b/packages/http-client/__tests__/basics.test.ts @@ -149,6 +149,16 @@ describe('basics', () => { expect(obj.url).toBe('https://postman-echo.com/get') }) + it('does basic get request with relative redirects', async () => { + const res: httpm.HttpClientResponse = await _http.get( + 'https://postman-echo.com/redirect-to?url=get' + ) + expect(res.message.statusCode).toBe(200) + const body: string = await res.readBody() + const obj = JSON.parse(body) + expect(obj.url).toBe('https://postman-echo.com/get') + }) + it('does basic get request with redirects (303)', async () => { const res: httpm.HttpClientResponse = await _http.get( `https://postman-echo.com/redirect-to?url=${encodeURIComponent( From ab0011e5062e455042e523288e22499d105fe2df Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Sat, 3 Jan 2026 14:06:28 +0000 Subject: [PATCH 3/3] tests(http-client): add mixed redirect case Ensures that the relative redirect location is relative to the previous url, not the original url. --- packages/http-client/__tests__/basics.test.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/http-client/__tests__/basics.test.ts b/packages/http-client/__tests__/basics.test.ts index 459d773bcf..46022bae58 100644 --- a/packages/http-client/__tests__/basics.test.ts +++ b/packages/http-client/__tests__/basics.test.ts @@ -159,6 +159,18 @@ describe('basics', () => { expect(obj.url).toBe('https://postman-echo.com/get') }) + it('does basic get request with hostname and relative redirects', async () => { + const res: httpm.HttpClientResponse = await _http.get( + `https://postman-echo.com/redirect-to?url=${encodeURIComponent( + 'https://www.postman-echo.com/redirect-to?url=get' + )}` + ) + expect(res.message.statusCode).toBe(200) + const body: string = await res.readBody() + const obj = JSON.parse(body) + expect(obj.url).toBe('https://www.postman-echo.com/get') + }) + it('does basic get request with redirects (303)', async () => { const res: httpm.HttpClientResponse = await _http.get( `https://postman-echo.com/redirect-to?url=${encodeURIComponent(