diff options
| author | Caio Cunha | 2013-06-19 21:30:28 +0100 | 
|---|---|---|
| committer | Pete Bacon Darwin | 2013-06-19 21:30:59 +0100 | 
| commit | 53359d549e364759d5b382c229f7d326799bf418 (patch) | |
| tree | 6495e53887970b63a90511a15089d7465e2ea6c1 /src | |
| parent | f1b94b4b599ab701bc75b55bbbbb73c5ef329a93 (diff) | |
| download | angular.js-53359d549e364759d5b382c229f7d326799bf418.tar.bz2 | |
fix($http): ensure case-insens. header overriding
If user send content-type header, both content-type and default
Content-Type headers were sent. Now default header overriding is
case-insensitive.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/http.js | 37 | 
1 files changed, 30 insertions, 7 deletions
| diff --git a/src/ng/http.js b/src/ng/http.js index fbdc89a5..2b9c7475 100644 --- a/src/ng/http.js +++ b/src/ng/http.js @@ -649,17 +649,12 @@ function $HttpProvider() {          transformRequest: defaults.transformRequest,          transformResponse: defaults.transformResponse        }; -      var headers = {}; +      var headers = mergeHeaders(requestConfig);        extend(config, requestConfig);        config.headers = headers;        config.method = uppercase(config.method); -      extend(headers, -          defaults.headers.common, -          defaults.headers[lowercase(config.method)], -          requestConfig.headers); -        var xsrfValue = isSameDomain(config.url, $browser.url())            ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]            : undefined; @@ -673,7 +668,11 @@ function $HttpProvider() {          // strip content-type if data is undefined          if (isUndefined(config.data)) { -          delete headers['Content-Type']; +          forEach(headers, function(value, header) { +            if (lowercase(header) === 'content-type') { +                delete headers[header]; +            } +          });          }          if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { @@ -729,6 +728,30 @@ function $HttpProvider() {            ? resp            : $q.reject(resp);        } + +      function mergeHeaders(config) { +        var defHeaders = defaults.headers, +            reqHeaders = extend({}, config.headers), +            defHeaderName, lowercaseDefHeaderName, reqHeaderName; + +        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); + +        // using for-in instead of forEach to avoid unecessary iteration after header has been found +        defaultHeadersIteration: +        for (defHeaderName in defHeaders) { +          lowercaseDefHeaderName = lowercase(defHeaderName); + +          for (reqHeaderName in reqHeaders) { +            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { +              continue defaultHeadersIteration; +            } +          } + +          reqHeaders[defHeaderName] = defHeaders[defHeaderName]; +        } + +        return reqHeaders; +      }      }      $http.pendingRequests = []; | 
