diff --git a/core/modules/startup/rootwidget.js b/core/modules/startup/rootwidget.js index 512fc580a..c28bfed66 100644 --- a/core/modules/startup/rootwidget.js +++ b/core/modules/startup/rootwidget.js @@ -39,6 +39,7 @@ exports.startup = function() { method: params.method, body: params.body, binary: params.binary, + useDefaultHeaders: params.useDefaultHeaders, oncompletion: params.oncompletion, onprogress: params.onprogress, bindStatus: params["bind-status"], diff --git a/core/modules/utils/dom/http.js b/core/modules/utils/dom/http.js index ddb1e17c4..9072daaf7 100644 --- a/core/modules/utils/dom/http.js +++ b/core/modules/utils/dom/http.js @@ -69,7 +69,7 @@ HttpClient.prototype.cancelAllHttpRequests = function() { for(var t=this.requests.length - 1; t--; t>=0) { var requestInfo = this.requests[t]; requestInfo.request.cancel(); - } + } } this.requests = []; this.updateRequestTracker(); @@ -112,6 +112,7 @@ function HttpClientRequest(options) { this.method = options.method || "GET"; this.body = options.body || ""; this.binary = options.binary || ""; + this.useDefaultHeaders = options.useDefaultHeaders !== "false" ? true : false, this.variables = options.variables; var url = options.url; $tw.utils.each(options.queryStrings,function(value,name) { @@ -156,6 +157,7 @@ HttpClientRequest.prototype.send = function(callback) { this.xhr = $tw.utils.httpRequest({ url: this.url, type: this.method, + useDefaultHeaders: this.useDefaultHeaders, headers: this.requestHeaders, data: this.body, returnProp: this.binary === "" ? "responseText" : "response", @@ -231,7 +233,8 @@ Make an HTTP request. Options are: exports.httpRequest = function(options) { var type = options.type || "GET", url = options.url, - headers = options.headers || {accept: "application/json"}, + useDefaultHeaders = options.useDefaultHeaders !== false ? true : false, + headers = options.headers || (useDefaultHeaders ? {accept: "application/json"} : {}), hasHeader = function(targetHeader) { targetHeader = targetHeader.toLowerCase(); var result = false; @@ -257,7 +260,7 @@ exports.httpRequest = function(options) { if(hasHeader("Content-Type") && ["application/x-www-form-urlencoded","multipart/form-data","text/plain"].indexOf(getHeader["Content-Type"]) === -1) { return false; } - return true; + return true; }, returnProp = options.returnProp || "responseText", request = new XMLHttpRequest(), @@ -307,10 +310,10 @@ exports.httpRequest = function(options) { request.setRequestHeader(headerTitle,header); }); } - if(data && !hasHeader("Content-Type")) { + if(data && !hasHeader("Content-Type") && useDefaultHeaders) { request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); } - if(!hasHeader("X-Requested-With") && !isSimpleRequest(type,headers)) { + if(!hasHeader("X-Requested-With") && !isSimpleRequest(type,headers) && useDefaultHeaders) { request.setRequestHeader("X-Requested-With","TiddlyWiki"); } // Send data diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid index d2dd6eed7..425da39a8 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-http-request.tid @@ -19,6 +19,7 @@ The following parameters are used: |method |HTTP method (eg "GET", "POST") | |body |String data to be sent with the request | |binary |<<.from-version "5.3.1">> Set to "yes" to cause the response body to be treated as binary data and returned in base64 format | +|useDefaultHeaders |<<.from-version "5.3.4">> Defaults to true. Set to "false" to prevent default headers from being added. This can be helpful when dealing with apis that restrict header fields. | |query-* |Query string parameters with string values | |header-* |Headers with string values | |password-header-* |Headers with values taken from the password store |