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/ng/http.js | |
| 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/ng/http.js')
| -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 = []; |
