Skip to content

Commit 0a2ff0b

Browse files
alan-agius4dgp1130
authored andcommitted
fix(@angular/ssr): ensure unique values in redirect response Vary header
Refactors the `createRedirectResponse` function to use a `Set` for constructing the `Vary` header. This ensures that `X-Forwarded-Prefix` is always present exactly once, and that existing `Vary` values from provided headers are correctly parsed, deduplicated, and preserved. Updates the associated unit tests to reflect the new header order and verify the deduplication logic.
1 parent cdbac82 commit 0a2ff0b

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

packages/angular/ssr/src/utils/redirect.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,18 @@ export function createRedirectResponse(
5050
);
5151
}
5252

53-
let vary = resHeaders.get('Vary') ?? '';
54-
if (vary) {
55-
vary += ', ';
53+
// Ensure unique values for Vary header
54+
const varyArray = resHeaders.get('Vary')?.split(',') ?? [];
55+
const varySet = new Set(['X-Forwarded-Prefix']);
56+
for (const vary of varyArray) {
57+
const value = vary.trim();
58+
59+
if (value) {
60+
varySet.add(value);
61+
}
5662
}
57-
vary += 'X-Forwarded-Prefix';
5863

59-
resHeaders.set('Vary', vary);
64+
resHeaders.set('Vary', [...varySet].join(', '));
6065
resHeaders.set('Location', location);
6166

6267
return new Response(null, {

packages/angular/ssr/test/utils/redirect_spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,14 @@ describe('Redirect Utils', () => {
3636
'Vary': 'Host',
3737
});
3838
expect(response.headers.get('Location')).toBe('/home');
39-
expect(response.headers.get('Vary')).toBe('Host, X-Forwarded-Prefix');
39+
expect(response.headers.get('Vary')).toBe('X-Forwarded-Prefix, Host');
40+
});
41+
42+
it('should NOT add duplicate X-Forwarded-Prefix if already present in Vary header', () => {
43+
const response = createRedirectResponse('/home', 302, {
44+
'Vary': 'X-Forwarded-Prefix, Host',
45+
});
46+
expect(response.headers.get('Vary')).toBe('X-Forwarded-Prefix, Host');
4047
});
4148

4249
it('should warn if Location header is provided in extra headers in dev mode', () => {

0 commit comments

Comments
 (0)