aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCaio Cunha2013-06-19 21:30:28 +0100
committerPete Bacon Darwin2013-06-19 21:30:59 +0100
commit53359d549e364759d5b382c229f7d326799bf418 (patch)
tree6495e53887970b63a90511a15089d7465e2ea6c1 /src
parentf1b94b4b599ab701bc75b55bbbbb73c5ef329a93 (diff)
downloadangular.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.js37
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 = [];