16

我有在 IE8 中使用 Microsoft 的 XDomainRequest 对象的代码。代码如下所示:

var url = "http://<host>/api/acquire?<query string>";  
var xdr = new XDomainRequest();  
xdr.onload = function(){  
    $.("#identifier").text(xdr.responseText);  
};  
xdr.open("GET", url);  
xdr.send();  

当“url”中的方案是“http://”时,该命令可以正常工作。但是,当方案是“https://”时,IE8 会给我一个“拒绝访问”JavaScript 错误。这两种方案在 FF 3.6.3 中都可以正常工作,当然,我在这里使用 XmlHttpRequest。对于这两种浏览器,我都遵守 W3C 访问控制。“http://”对两种浏览器都适用。所以问题在于 IE8、XDomainRequest 和 SSL。

SSL 证书不是问题。<host如果我在 IE8 的地址栏中输入 https:// >/,其中<host> 与上面的“url”相同,则页面加载正常。

所以我们有以下内容: -直接从浏览器中
点击 https:// >/ 可以正常工作; - 点击 https:// >/api/acquire?> 不允许通过 XDomainRequest。<host
<host<query string

可以做到吗?我是不是遗漏了什么?

4

1 回答 1

18

显然,答案在这里:http: //blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

此页面上的第 7 点说,“请求必须针对与托管页面相同的方案。”

以下是第 7 点的一些支持文本:

“我们的意图绝对是阻止 HTTPS 页面对基于 HTTP 的资源发出 XDomainRequest,因为这种情况会带来许多开发人员和大多数用户不理解的混合内容安全威胁。

但是,此限制过于宽泛,因为它会阻止 HTTP 页面发出针对 HTTPS 页面的 XDomainRequest。虽然 HTTP 页面本身可能已被泄露,但没有理由禁止它安全地接收公共资源。”

目前看来,我原来的问题的答案是:是的,如果托管页面可以使用“https://”方案;不,如果它不能。

于 2010-06-08T18:26:17.810 回答