Javascript 具有标头身份验证的跨域请求
我需要发送一个Javascript 具有标头身份验证的跨域请求,javascript,jquery,jsonp,Javascript,Jquery,Jsonp,我需要发送一个Get请求,该请求具有跨域来源和标头身份验证 它在Chrome和Firefox中运行良好,但我在Safari和IE中遇到问题。在随机情况下,它会返回401 <script> var url = 'username:password@anotherdomain.com'; $.ajax({ url: url, dataType: 'jsonp', jsonpCallback: "callback", success: function(js
Get
请求,该请求具有跨域来源和标头身份验证
它在Chrome和Firefox中运行良好,但我在Safari和IE中遇到问题。在随机情况下,它会返回401
<script>
var url = 'username:password@anotherdomain.com';
$.ajax({
url: url,
dataType: 'jsonp',
jsonpCallback: "callback",
success: function(json) {
alert(json);
}
});
</script>
var url='用户名:password@anotherdomain.com';
$.ajax({
url:url,
数据类型:“jsonp”,
jsonpCallback:“回调”,
成功:函数(json){
警报(json);
}
});
解决此问题的最佳选项是什么?对于Internet Explorer
8和9,您需要使用
Internet Explorer 10+跨域请求是否与所有其他浏览器一样正常
如文档中所述,您需要
- 使用
var XDR=new XDomainRequest()创建XDR的对象代码>
- 使用
xdr使用get方法打开连接password@anotherdomain.com");代码>
- 使用
xdr.send()将数据发送回服务器代码>
完整的代码参考如图所示
作为在internet explorer中设置用户名
和密码
的变通方法,您可以设置以下内容
DWORD
中的iexplore.exe
到0
:[HKEY\U LOCAL\U MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE\u HTTP\u USERNAME\u PASSWORD\u DISABLE]
如果我正确理解了这个问题,您可以使用beforeSend回调来对请求添加基本身份验证。这与jsonp或跨源代码无关
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
}
使用getJSON
$.getJSON("url",function (data) {/*code here*/});
我建议您尝试两件事:
在ajaxSetup中,执行以下操作:
$.ajaxSetup({
....,
xhrFields: {
withCredentials: true
},
crossDomain: true,
....
});
在ajax请求中,除了凭证标志之外,还要像这样设置完整的url
'Access-Control-Allow-Origin: https://not-example.com'
'Access-Control-Allow-Credentials: true'
对于具有身份验证的服务器,这些浏览器不允许在此标头中使用“*”。Access Control Allow Origin标头必须包含客户端传递的源标头的值 你是通过Firefox或Chrome获得“随机”401,还是通过Safari和IE获得?这有规律吗?就好像url缺少相应的协议一样。您可以使用console.log
而不是alert
来获取JSON变量的内容。对于Safari和IE,它甚至不会执行,控制台中也不会显示任何内容。现在我发现IE不支持URL中的用户名和密码,所以我正在寻找任何其他方式,让ajax调用支持跨来源的标题验证您使用的是哪个版本的IE?我尝试了所有IE版本IE9、IE10、EDGEmakes,确保对这些类型的交互使用HTTPS$。getJSON()是$.ajax()的缩写jQuery方法,如果要解决这个问题,仍然需要解释为什么它能解决这个问题,Kevin,我不确定我以前尝试使用这种方法时是否遗漏了一些东西。工作正常。谢谢