@@ -482,17 +482,40 @@ function $HttpProvider() {
482
482
483
483
var reqTransformFn = config . transformRequest || $config . transformRequest ,
484
484
respTransformFn = config . transformResponse || $config . transformResponse ,
485
- defHeaders = $config . headers ,
486
- reqHeaders = extend ( { 'X-XSRF-TOKEN' : $browser . cookies ( ) [ 'XSRF-TOKEN' ] } ,
487
- defHeaders . common , defHeaders [ lowercase ( config . method ) ] , config . headers ) ,
488
- reqData = transformData ( config . data , headersGetter ( reqHeaders ) , reqTransformFn ) ,
485
+ reqHeaders = extend ( { } , config . headers ) ,
486
+ defHeaders = extend (
487
+ { 'X-XSRF-TOKEN' : $browser . cookies ( ) [ 'XSRF-TOKEN' ] } ,
488
+ $config . headers . common ,
489
+ $config . headers [ lowercase ( config . method ) ]
490
+ ) ,
491
+ reqData ,
492
+ defHeaderName , lowercaseDefHeaderName , headerName ,
489
493
promise ;
490
494
495
+ // using for-in instead of forEach to avoid unecessary iteration after header has been found
496
+ defaultHeadersIteration:
497
+ for ( defHeaderName in defHeaders ) {
498
+ lowercaseDefHeaderName = lowercase ( defHeaderName ) ;
499
+ for ( headerName in config . headers ) {
500
+ if ( lowercase ( headerName ) === lowercaseDefHeaderName ) {
501
+ continue defaultHeadersIteration;
502
+ }
503
+ }
504
+ reqHeaders [ defHeaderName ] = defHeaders [ defHeaderName ] ;
505
+ }
506
+
491
507
// strip content-type if data is undefined
492
508
if ( isUndefined ( config . data ) ) {
493
- delete reqHeaders [ 'Content-Type' ] ;
509
+ for ( var header in reqHeaders ) {
510
+ if ( lowercase ( header ) === 'content-type' ) {
511
+ delete reqHeaders [ header ] ;
512
+ break ;
513
+ }
514
+ }
494
515
}
495
516
517
+ reqData = transformData ( config . data , headersGetter ( reqHeaders ) , reqTransformFn ) ;
518
+
496
519
// send request
497
520
promise = sendReq ( config , reqData , reqHeaders ) ;
498
521
0 commit comments