diff options
| author | Caio Cunha | 2013-06-19 21:30:28 +0100 |
|---|---|---|
| committer | Pete Bacon Darwin | 2013-06-19 22:43:19 +0100 |
| commit | 25d9f5a804b7a6a61db6e84e594b1b5fe7ea14bf (patch) | |
| tree | 9f543b3fe3038a372d9fea7d8b3e84fbdd13da02 /src/ng | |
| parent | 1b234cb7af2049c458f5e15d422742d4049d8f9d (diff) | |
| download | angular.js-25d9f5a804b7a6a61db6e84e594b1b5fe7ea14bf.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')
| -rw-r--r-- | src/ng/http.js | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/ng/http.js b/src/ng/http.js index 5fdc1a18..d9813663 100644 --- a/src/ng/http.js +++ b/src/ng/http.js @@ -482,17 +482,40 @@ function $HttpProvider() { var reqTransformFn = config.transformRequest || $config.transformRequest, respTransformFn = config.transformResponse || $config.transformResponse, - defHeaders = $config.headers, - reqHeaders = extend({'X-XSRF-TOKEN': $browser.cookies()['XSRF-TOKEN']}, - defHeaders.common, defHeaders[lowercase(config.method)], config.headers), - reqData = transformData(config.data, headersGetter(reqHeaders), reqTransformFn), + reqHeaders = extend({}, config.headers), + defHeaders = extend( + {'X-XSRF-TOKEN': $browser.cookies()['XSRF-TOKEN']}, + $config.headers.common, + $config.headers[lowercase(config.method)] + ), + reqData, + defHeaderName, lowercaseDefHeaderName, headerName, promise; + // using for-in instead of forEach to avoid unecessary iteration after header has been found + defaultHeadersIteration: + for(defHeaderName in defHeaders) { + lowercaseDefHeaderName = lowercase(defHeaderName); + for(headerName in config.headers) { + if (lowercase(headerName) === lowercaseDefHeaderName) { + continue defaultHeadersIteration; + } + } + reqHeaders[defHeaderName] = defHeaders[defHeaderName]; + } + // strip content-type if data is undefined if (isUndefined(config.data)) { - delete reqHeaders['Content-Type']; + for(var header in reqHeaders) { + if (lowercase(header) === 'content-type') { + delete reqHeaders[header]; + break; + } + } } + reqData = transformData(config.data, headersGetter(reqHeaders), reqTransformFn); + // send request promise = sendReq(config, reqData, reqHeaders); |
