@@ -39,7 +39,8 @@ import {
3939 rawHeadersToObjectPreservingCase ,
4040 flattenPairedRawHeaders ,
4141 findRawHeader ,
42- pairFlatRawHeaders
42+ pairFlatRawHeaders ,
43+ findRawHeaderIndex
4344} from '../../util/header-utils' ;
4445import { streamToBuffer , asBuffer } from '../../util/buffer-utils' ;
4546import {
@@ -437,12 +438,18 @@ export class PassThroughHandler extends PassThroughHandlerDefinition {
437438
438439 const hostHeaderName = isH2Downstream ? ':authority' : 'host' ;
439440
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 ) {
442445 // Should never happen really, but just in case:
443446 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 ;
446453
447454 if ( updateHostHeader === undefined || updateHostHeader === true ) {
448455 // If updateHostHeader is true, or just not specified, match the new target
@@ -554,10 +561,11 @@ export class PassThroughHandler extends PassThroughHandlerDefinition {
554561 rawHeaders = objectHeadersToRaw ( headers ) ;
555562 }
556563 } else if ( this . beforeRequest ) {
557- const completedRequest = await waitForCompletedRequest ( clientReq ) ;
558- const clientRawHeaders = completedRequest . rawHeaders ;
564+ const clientRawHeaders = rawHeaders ;
559565 const clientHeaders = rawHeadersToObject ( clientRawHeaders ) ;
560566
567+ const completedRequest = await waitForCompletedRequest ( clientReq ) ;
568+
561569 const modifiedReq = await this . beforeRequest ( {
562570 ...completedRequest ,
563571 url : reqUrl , // May have been overwritten by forwarding
0 commit comments