@@ -39,7 +39,8 @@ import {
39
39
rawHeadersToObjectPreservingCase ,
40
40
flattenPairedRawHeaders ,
41
41
findRawHeader ,
42
- pairFlatRawHeaders
42
+ pairFlatRawHeaders ,
43
+ findRawHeaderIndex
43
44
} from '../../util/header-utils' ;
44
45
import { streamToBuffer , asBuffer } from '../../util/buffer-utils' ;
45
46
import {
@@ -437,12 +438,18 @@ export class PassThroughHandler extends PassThroughHandlerDefinition {
437
438
438
439
const hostHeaderName = isH2Downstream ? ':authority' : 'host' ;
439
440
440
- let hostHeader = findRawHeader ( rawHeaders , hostHeaderName ) ;
441
- if ( ! hostHeader ) {
441
+ let hostHeaderIndex = findRawHeaderIndex ( rawHeaders , hostHeaderName ) ;
442
+ let hostHeader : [ string , string ] ;
443
+
444
+ if ( hostHeaderIndex === - 1 ) {
442
445
// Should never happen really, but just in case:
443
446
hostHeader = [ hostHeaderName , hostname ! ] ;
444
- rawHeaders . unshift ( hostHeader ) ;
445
- } ;
447
+ hostHeaderIndex = rawHeaders . length ;
448
+ } else {
449
+ // Clone this - we don't want to modify the original headers, as they're used for events
450
+ hostHeader = _ . clone ( rawHeaders [ hostHeaderIndex ] ) ;
451
+ }
452
+ rawHeaders [ hostHeaderIndex ] = hostHeader ;
446
453
447
454
if ( updateHostHeader === undefined || updateHostHeader === true ) {
448
455
// If updateHostHeader is true, or just not specified, match the new target
@@ -554,10 +561,11 @@ export class PassThroughHandler extends PassThroughHandlerDefinition {
554
561
rawHeaders = objectHeadersToRaw ( headers ) ;
555
562
}
556
563
} else if ( this . beforeRequest ) {
557
- const completedRequest = await waitForCompletedRequest ( clientReq ) ;
558
- const clientRawHeaders = completedRequest . rawHeaders ;
564
+ const clientRawHeaders = rawHeaders ;
559
565
const clientHeaders = rawHeadersToObject ( clientRawHeaders ) ;
560
566
567
+ const completedRequest = await waitForCompletedRequest ( clientReq ) ;
568
+
561
569
const modifiedReq = await this . beforeRequest ( {
562
570
...completedRequest ,
563
571
url : reqUrl , // May have been overwritten by forwarding
0 commit comments