@@ -649,17 +649,12 @@ function $HttpProvider() {
649
649
transformRequest : defaults . transformRequest ,
650
650
transformResponse : defaults . transformResponse
651
651
} ;
652
- var headers = { } ;
652
+ var headers = mergeHeaders ( requestConfig ) ;
653
653
654
654
extend ( config , requestConfig ) ;
655
655
config . headers = headers ;
656
656
config . method = uppercase ( config . method ) ;
657
657
658
- extend ( headers ,
659
- defaults . headers . common ,
660
- defaults . headers [ lowercase ( config . method ) ] ,
661
- requestConfig . headers ) ;
662
-
663
658
var xsrfValue = isSameDomain ( config . url , $browser . url ( ) )
664
659
? $browser . cookies ( ) [ config . xsrfCookieName || defaults . xsrfCookieName ]
665
660
: undefined ;
@@ -673,7 +668,11 @@ function $HttpProvider() {
673
668
674
669
// strip content-type if data is undefined
675
670
if ( isUndefined ( config . data ) ) {
676
- delete headers [ 'Content-Type' ] ;
671
+ forEach ( headers , function ( value , header ) {
672
+ if ( lowercase ( header ) === 'content-type' ) {
673
+ delete headers [ header ] ;
674
+ }
675
+ } ) ;
677
676
}
678
677
679
678
if ( isUndefined ( config . withCredentials ) && ! isUndefined ( defaults . withCredentials ) ) {
@@ -729,6 +728,30 @@ function $HttpProvider() {
729
728
? resp
730
729
: $q . reject ( resp ) ;
731
730
}
731
+
732
+ function mergeHeaders ( config ) {
733
+ var defHeaders = defaults . headers ,
734
+ reqHeaders = extend ( { } , config . headers ) ,
735
+ defHeaderName , lowercaseDefHeaderName , reqHeaderName ;
736
+
737
+ defHeaders = extend ( { } , defHeaders . common , defHeaders [ lowercase ( config . method ) ] ) ;
738
+
739
+ // using for-in instead of forEach to avoid unecessary iteration after header has been found
740
+ defaultHeadersIteration:
741
+ for ( defHeaderName in defHeaders ) {
742
+ lowercaseDefHeaderName = lowercase ( defHeaderName ) ;
743
+
744
+ for ( reqHeaderName in reqHeaders ) {
745
+ if ( lowercase ( reqHeaderName ) === lowercaseDefHeaderName ) {
746
+ continue defaultHeadersIteration;
747
+ }
748
+ }
749
+
750
+ reqHeaders [ defHeaderName ] = defHeaders [ defHeaderName ] ;
751
+ }
752
+
753
+ return reqHeaders ;
754
+ }
732
755
}
733
756
734
757
$http . pendingRequests = [ ] ;
0 commit comments