javascript - 我的 AJAX 请求对象没有正确解析 URL 的协议(protocol)部分

标签 javascript ajax https

我正在尝试从安全页面发送 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/

相关文章:

javascript - 钩子(Hook)中的延迟状态更改

jquery - 通过Jquery索引定位div内的img元素

ssl - 我可以在 mean.io 的什么地方设置我的 ssl 证书?

android - "Connection closed by peer"Android 7.0 Nougat 在通过 HTTPS 连接到 SHA256 CA 安装的 Windows 2003 Server SP2 时发生错误

javascript - Canvas 绕圈移动

javascript - 创建 JavaScript 日期对象

c# - 如何使用java脚本检测按下键盘按键时的按键代码

jquery - 如何使用ajax调用将对象传递给 Controller

jquery ajax循环只返回最后一个值

apache - 我发现一个问题,当我将 apache benchmark(ab) 与 http 一起使用时