Skip to content

Commit 25fa718

Browse files
committed
Skip Server-Timing header injection when sentry-trace already exists
1 parent 488415f commit 25fa718

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

packages/remix/src/server/serverTimingTracePropagation.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ export function injectServerTimingHeaderValue(response: Response, serverTimingVa
114114
const headers = new Headers(response.headers);
115115
const existing = headers.get('Server-Timing');
116116

117+
// Skip injection if Sentry trace data already exists to prevent duplicates
118+
if (existing?.includes('sentry-trace')) {
119+
DEBUG_BUILD && debug.log('Server-Timing header already contains sentry-trace, skipping injection');
120+
return response;
121+
}
122+
117123
headers.set('Server-Timing', existing ? `${existing}, ${serverTimingValue}` : serverTimingValue);
118124

119125
return new Response(response.body, {

packages/remix/test/server/serverTimingTracePropagation.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,20 @@ describe('serverTimingTracePropagation', () => {
238238
expect(result.headers.get('Server-Timing')).toBe('cache;dur=100, sentry-trace;desc="test"');
239239
});
240240

241+
it('skips injection when sentry-trace already exists in header', () => {
242+
const existingHeader = 'sentry-trace;desc="existing-trace-id-1234567890123456-1", baggage;desc="existing"';
243+
const mockResponse = new Response('test body', {
244+
status: 200,
245+
headers: new Headers({ 'Server-Timing': existingHeader }),
246+
});
247+
248+
const result = injectServerTimingHeaderValue(mockResponse, 'sentry-trace;desc="new-trace"');
249+
250+
// Should return original response unchanged
251+
expect(result).toBe(mockResponse);
252+
expect(result.headers.get('Server-Timing')).toBe(existingHeader);
253+
});
254+
241255
it('preserves response body', async () => {
242256
const mockResponse = new Response('test body content', {
243257
status: 200,

0 commit comments

Comments
 (0)