Jquery 无法加载选项资源-基本身份验证+;SSL-Chrome/Safari
我目前在Chrome和Safari上遇到了一个问题,但在Firefox上没有。 我只是想向服务器发送一个基本的Jquery 无法加载选项资源-基本身份验证+;SSL-Chrome/Safari,jquery,google-chrome,ssl,safari,basic-authentication,Jquery,Google Chrome,Ssl,Safari,Basic Authentication,我目前在Chrome和Safari上遇到了一个问题,但在Firefox上没有。 我只是想向服务器发送一个基本的GET请求。这一个使用SSL和基本身份验证,并使用base64编码的“username:password”。下面是一个例子: $.ajax({ url: 'https://(...)', type: "GET", beforeSend: function(xhr) { var base64 = 'dXNlcm5hbWU6cGFzc3dvcmQ='; retur
GET
请求。这一个使用SSL和基本身份验证,并使用base64编码的“username:password”
。下面是一个例子:
$.ajax({
url: 'https://(...)',
type: "GET",
beforeSend: function(xhr) {
var base64 = 'dXNlcm5hbWU6cGFzc3dvcmQ=';
return xhr.setRequestHeader("Authorization", "Basic " + base64);
}
});
Chrome developer工具向我显示了一个错误:
OPTIONS https://(...) Resource failed to load
f.support.ajax.f.ajaxTransport.send
f.extend.ajax
我能做什么?谢谢您的帮助。在我看来就像XSS保护。尽管错误看起来很奇怪。要克服这个问题,您必须使用jsonp。然而,这意味着您必须将用户/密码放入url明文中,因此这不是一个真正的解决方案。。。
var auth;
function make_base_auth(user, password) {
var tok = user + ':' + password;
var hash = Base64.encode(tok);
return "Basic " + hash;
}
function getAuthCookie() {
var cn = "Authorization=";
var idx = document.cookie.indexOf(cn)
var end;
if(idx != -1) {
var end = document.cookie.indexOf(";", idx + 1);
if(end == -1)
end = document.cookie.length;
return unescape(document.cookie.substring(idx + cn.length, end));
} else {
return "";
}
}
document.cookie = encodeURIComponent("Authorization") + "=deleted; expires=" + new Date(0).toUTCString();
auth = make_base_auth($.trim($('#email').val()), $.trim($('#password').val()));
document.cookie = "Authorization=" + auth;
$.ajax({
url : BASE_URI + "user",
method : "GET",
beforeSend : function(xhr) {
xhr.setRequestHeader('Authorization', getAuthCookie());
},
xhrFields : {
withCredentials : true
},
accept : "application/json",
contentType : "application/json",
cache : false,
cookie : false,
statusCode : {
404 : function() {
console.log("Page Not Found");
}
}
}).success(function(response) {
console.log("Login SUCCESS " + JSON.stringify(response));
}).fail(function(response) {
}).then(function() {
});