当ajax目标是localhost时,IE 10和11中的访问被拒绝
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当ajax目标是localhost时,IE 10和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) {}
状态是0
对象中的xhr
,错误是“拒绝访问”
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();
您可以通过将原始站点添加到“受信任的站点”安全区域来解决此错误。您可以通过将“http://client.cors-api.appspot.com”添加到“受信任的站点”区域并使用test-cors.org上的此测试页和您的localhost站点作为远程URL来测试此操作。
除了可信站点要求之外,我发现问题没有得到解决,直到我使用与请求相同的协议作为我的来源,例如我的测试站点托管在https上但是使用http(没有s)的任何目标都失败了。
这仅适用于IE,Chrome只是礼貌地在调试控制台中记录警告并且不会失败。
如果你试图在IE9中制作跨源的ajax请求,你需要使用XDomainRequest
而不是XMLHttpRequest
。有一个包装XDR的jQuery插件。您应该知道XDR存在一些明显的限制。
另一种选择是使用这样的库:https://github.com/jpillora/xdomain。
jQuery使用IE9中不支持的XMLHttpRequest
对象实现ajax调用。你必须强迫它使用XDomainRequest
。
我使用这个jQuery插件解决了这个问题:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
注意:
不要在Ajax中使用“http://www.domain.xxx”或“http://localhost/”或“IP”作为URL。仅使用没有地址的路径(目录)和页面名称。
虚假状态:
var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir/getSecurityCode.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);
真实状态:
var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'dir/getSecurityCode.php', true); // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);
function createAjax()
{
var ajaxHttp = null;
try
{
if(typeof ActiveXObject == 'function')
ajaxHttp = new ActiveXObject("Microsoft.XMLHTTP");
else
if(window.XMLHttpRequest)
ajaxHttp = new XMLHttpRequest();
}
catch(e)
{
alert(e.message);
return null;
}
//-------------
return ajaxHttp;
};
以上是关于当ajax目标是localhost时,IE 10和11中的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章