【问题标题】:XDomainRequest in IE is giving Access is Denied errorIE 中的 XDomainRequest 给出访问被拒绝错误
【发布时间】:2012-11-20 17:08:01
【问题描述】:

这是我使用的代码如下:

我使用的是 IE9,无法在“网络”选项卡中看到正在发送的请求。我确实在 JSP 中将 Access-Control 标头设置为:

<% response.setHeader("Access-Control-Allow-Origin", "*");%>

从 JSP 获取 AJAX HTML 内容的代码:

if ($.browser.msie && window.XDomainRequest) {

    var xdr = new window.XDomainRequest();
    xdr.open("GET", "http://dev01.org:11110/crs/qw/qw.jsp?&_=" + Math.random());
    xdr.contentType = "text/plain";
    xdr.timeout = 5000;
    xdr.onerror = function () {
        console.log('we have an error!');
    }
    xdr.onprogress = function () {
        console.log('this sucks!');
    };
    xdr.ontimeout = function () {
        console.log('it timed out!');
    };
    xdr.onopen = function () {
        console.log('we open the xdomainrequest');
    };
    xdr.onload = function() {
        alert(xdr.responseText);
    };
    xdr.send(null);
} else { ...... }

我收到拒绝访问错误。任何帮助将不胜感激!

【问题讨论】:

    标签: xdomainrequest


    【解决方案1】:

    请求必须针对与托管页面相同的方案

    在您的示例中,您正在请求:

    http://dev01 ...
    

    你应该从 HTTP 协议中执行此操作。

    例如: 如果您的站点,js 脚本所在的位置:http://dev.org 你可以这样做:

    xhr = new XDomainRequest();
    xhr.open("GET", "http://dev01.org?p=1");
    

    但这会引发“访问被拒绝”:

    xhr = new XDomainRequest();
    xhr.open("GET", "https://dev01.org?p=1");
    

    【讨论】:

      【解决方案2】:

      我对 XDomainRequest 的体验是它不尊重Access-Control-Allow-Origin: *。相反,您必须指定域。如果您需要动态生成它,可以从 HTTP_REFERER 标头中获得它,或者如果您只期望来自一个域的请求,您可以手动设置它。 This article might help.

      <% response.setHeader("Access-Control-Allow-Origin", "http://dev01.org");%>
      

      【讨论】:

        猜你喜欢
        • 2013-06-09
        • 2012-01-17
        • 2016-08-13
        • 2013-12-20
        • 2015-01-09
        • 1970-01-01
        • 2011-09-26
        • 2013-06-26
        相关资源
        最近更新 更多