我正在尝试从安全页面发送 AJAX 请求,但 XMLHttpRequest 对象没有正确解析 URL 的协议(protocol)部分。此行为在 Safari、Chrome 和 Canary 中是相同的。
这是我的 JavaScript:
function sendGETRequest(url, params, callback) {
"use strict";
var req = new XMLHttpRequest();
req.onreadystatechange = function () {
if (req.readyState === 4) {
if (req.status !== 200) {
callback({ajaxError: true, status: req.status});
} else {
callback(req);
}
}
};
req.open("GET", url + "?" + params, true);
req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
req.send();
}
以下是一些传递给 sendGETRequest() 的不同 URL 及其结果:
url = "ajax/";
GET https://mydomain/mypage/ajax/?params 404 (NOT FOUND)
以上是预期的行为:相对 url 正确解析且协议(protocol)完好无损。
url = "/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
在这里,真实的 url 被正确地附加到域根,但是使用了错误的协议(protocol)。
url = "https://mydomain/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
这里,协议(protocol)被忽略了。
需要说明的是,我并不是要解决同源策略;我想从安全页面向具有相同(安全)来源的资源发送 AJAX 请求。我怎样才能完成这个简单的任务?
最佳答案
这里有一个关于这个话题的对话:http://bytes.com/topic/javascript/answers/459071-ajax-https
最后一篇文章指出“只是为了绝对明确;XML HTTP 请求在 https 上工作 与他们通过 http 所做的完全一样。如果他们不这样做,我们的 QA 部门会 他们几乎完全通过 https 进行测试时已经说了一些话”
可能服务器在发出请求时未使用 Https (ssl):mydomain/ajax/
。
关于javascript - 我的 AJAX 请求对象没有正确解析 URL 的协议(protocol)部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958964/