@@ -121,7 +121,29 @@ function _deduplicateHeaders(request: UndiciRequest): void {
121121 if ( Array . isArray ( request . headers ) ) {
122122 _deduplicateArrayHeaders ( request . headers ) ;
123123 } else {
124- request . headers = _deduplicateStringHeaders ( request . headers ) ;
124+ const headersArray = request . headers . split ( '\r\n' ) ;
125+ const headers : string [ ] = [ ] ;
126+ for ( const header of headersArray ) {
127+ try {
128+ const [ key , value ] = header . split ( ':' ) . map ( part => part . trim ( ) ) ;
129+ if ( key != null && value != null ) {
130+ headers . push ( key , value ) ;
131+ }
132+ } catch {
133+ continue ;
134+ }
135+ }
136+
137+ _deduplicateArrayHeaders ( headers ) ;
138+
139+ const headerPairs : string [ ] = [ ] ;
140+ for ( let i = 0 ; i < headers . length ; i += 2 ) {
141+ headerPairs . push ( `${ headers [ i ] } : ${ headers [ i + 1 ] } ` ) ;
142+ }
143+ const concatenated = headerPairs . join ( '\r\n' ) ;
144+ if ( concatenated ) {
145+ request . headers = concatenated . concat ( '\r\n' ) ;
146+ }
125147 }
126148}
127149
@@ -161,31 +183,6 @@ function _deduplicateArrayHeader(headers: string[], headerName: string): void {
161183 }
162184}
163185
164- function _deduplicateStringHeaders ( input : string ) : string {
165- // Deduplicate sentry-trace — keep only the first occurrence
166- let sentryTraceCount = 0 ;
167- let result = input . replace ( / s e n t r y - t r a c e : .* \r \n / g, match => {
168- return ++ sentryTraceCount === 1 ? match : '' ;
169- } ) ;
170-
171- // Deduplicate baggage — merge all occurrences into one but preserve initial sentry- values
172- let mergedBaggage : string | undefined ;
173- result = result . replace ( / b a g g a g e : ( .* ) \r \n / g, ( _match , value : string ) => {
174- if ( ! mergedBaggage ) {
175- mergedBaggage = value ;
176- } else {
177- mergedBaggage = mergeBaggageHeaders ( value , mergedBaggage ) || mergedBaggage ;
178- }
179- return '' ;
180- } ) ;
181-
182- if ( mergedBaggage ) {
183- result += `${ SENTRY_BAGGAGE_HEADER } : ${ mergedBaggage } \r\n` ;
184- }
185-
186- return result ;
187- }
188-
189186/** Add a breadcrumb for an outgoing fetch/undici request. */
190187export function addFetchRequestBreadcrumb ( request : UndiciRequest , response : UndiciResponse ) : void {
191188 const data = getBreadcrumbData ( request ) ;
0 commit comments