セキュリティで保護されたページから AJAX 要求を送信しようとしていますが、XMLHttpRequest オブジェクトが URL のプロトコル部分を適切に解決しません。この動作は、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 は、プロトコルを変更せずに正しく解決されます。
url = "/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
ここでは、実際の URL がドメイン ルートに正しく追加されていますが、プロトコルが間違っています。
url = "https://mydomain/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
ここでは、プロトコルは単に無視されます。
明確にするために、私は同じオリジン ポリシーを回避しようとしているわけではありません。安全なページから同じ (安全な) オリジンのリソースに AJAX リクエストを送信したいと考えています。この単純なタスクをどのように達成できますか?