diff --git a/lib/defaults.js b/lib/defaults.js index 5d8aac7..94e9d44 100644 --- a/lib/defaults.js +++ b/lib/defaults.js @@ -20,8 +20,16 @@ module.exports = { } if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) { // Set application/json if no Content-Type has been specified - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = 'application/json;charset=utf-8'; + if (!utils.isUndefined(headers)) { + utils.forEach(headers, function (val, key) { + if (key.toLowerCase() === 'content-type') { + headers['Content-Type'] = val; + } + }); + + if (utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = 'application/json;charset=utf-8'; + } } return JSON.stringify(data); } diff --git a/test/specs/requests.spec.js b/test/specs/requests.spec.js index 88bde87..3833b63 100644 --- a/test/specs/requests.spec.js +++ b/test/specs/requests.spec.js @@ -56,6 +56,29 @@ describe('requests', function () { }, 0); }); + it('should allow overriding Content-Type header case-insensitive', function (done) { + var request, response; + var contentType = 'application/vnd.myapp.type+json'; + + axios({ + url: '/foo', + method: 'post', + data: { prop: 'value' }, + headers: { + 'content-type': contentType + } + }).then(function (res) { + response = res; + }); + + setTimeout(function () { + request = jasmine.Ajax.requests.mostRecent(); + + expect(request.requestHeaders['Content-Type']).toEqual(contentType); + done(); + }); + }); + it('should support binary data as array buffer', function (done) { var request; var input = new Int8Array(2);