diff --git a/src/htmx.js b/src/htmx.js index 01fa8218..1f58b7fb 100644 --- a/src/htmx.js +++ b/src/htmx.js @@ -1476,6 +1476,18 @@ return (function () { addExpressionVars(parentElt(elt), rawParameters); } + function safelySetHeaderValue(xhr, header, headerValue) { + if (headerValue !== null) { + try { + xhr.setRequestHeader(header, headerValue); + } catch (e) { + // On an exception, try to set the header URI encoded instead + xhr.setRequestHeader(header, encodeURIComponent(headerValue)); + xhr.setRequestHeader(header + "-URI-AutoEncoded", "true"); + } + } + } + function issueAjaxRequest(elt, verb, path, eventTarget) { var target = getTarget(elt); if (target == null) { @@ -1569,7 +1581,8 @@ return (function () { // request headers for (var header in headers) { if (headers.hasOwnProperty(header)) { - if (headers[header] !== null) xhr.setRequestHeader(header, headers[header]); + var headerValue = headers[header]; + safelySetHeaderValue(xhr, header, headerValue); } } diff --git a/test/core/internals.js b/test/core/internals.js index 9e6f139e..5089daf5 100644 --- a/test/core/internals.js +++ b/test/core/internals.js @@ -1,12 +1,4 @@ describe("Core htmx internals Tests", function() { - beforeEach(function () { - this.server = makeServer(); - clearWorkArea(); - }); - afterEach(function () { - this.server.restore(); - clearWorkArea(); - }); it("makeFragment works with janky stuff", function(){ htmx._("makeFragment")("").tagName.should.equal("BODY"); @@ -20,4 +12,12 @@ describe("Core htmx internals Tests", function() { htmx._("makeFragment")("