当ajax目标是localhost时,IE 10和11中的访问被拒绝

nar*_*c88 38 ajax xmlhttprequest cors internet-explorer-10 internet-explorer-11

我正在尝试在互联网上的服务器(http)之间进行ajax调用.并将其定位到我自己的localhost.FF/Chrome/ETC ......有效.它只是一个IE问题.IM使用IE 11和10.

请求甚至没有完成."拒绝访问"立即被抛出.

这是代码.只为你看.

不是IE8和IE9中的经典HTTP/HTTPS错误.这是别的,但文档没有帮助.

$jq.ajax({
            contentType: 'application/json',
            url: url,
            dataType: 'json',
            crossDomain: true,
            beforeSend: function (xhr) {
                xhr.withCredentials = true; 
                xhr.setRequestHeader("Authorization", "Basic " + $jq.base64.encode(username and password));
            },
            success: function (data, status, headers) {},
            error: function (xhr, status, error) {}
Run Code Online (Sandbox Code Playgroud)

状态是0xhr对象和错误是"拒绝访问"

oob*_*bug 45

Internet Explorer将此错误作为其安全区域功能的一部分引发.尝试从"Internet"区域中的原点访问"本地Intranet"区域中的资源时,使用默认安全设置会出现"访问被拒绝"错误.

如果您手动编写Ajax代码,则在尝试打开资源时Internet Explorer会引发错误.例如:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost/', true); // This line will trigger an error
xhr.send();
Run Code Online (Sandbox Code Playgroud)

您可以通过将原始站点添加到"受信任的站点"安全区域来解决此错误.您可以通过将"http://client.cors-api.appspot.com"添加到"受信任的站点"区域并在test-cors.org上使用此测试页面将您的localhost站点作为远程URL来测试.

  • 但是,如果您的JS由其他人运行并且您无法更改其IE安全设置,该怎么办?这解决了一台计算机的问题....但不适用于部署的代码. (4认同)
  • @oobug正是我的意思-仅当您有权更改IE安全设置时,此答案才适用。如果您有一些内部应用程序,那很好,但是不适用于狂野的Web上的JS代码。 (2认同)

Mar*_*nen 18

除了可信站点要求之外,我发现问题没有得到修复,直到我使用相同的协议作为我的来源请求,例如我的测试站点托管在https上但是使用http(没有s)的任何目的地都失败了.

这仅适用于IE,Chrome只是礼貌地在调试控制台中记录警告并且不会失败.