diff options
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 = []; |
