根据带有凭据的请求,Firefox 只会在以下情况下发送凭据以及跨域帖子
invocation.withCredentials = "true";
已设置……但似乎 jQuery 的 Ajax API 并没有为此提供任何机制。
有什么我错过了吗?我还有其他方法可以做到吗?
根据带有凭据的请求,Firefox 只会在以下情况下发送凭据以及跨域帖子
invocation.withCredentials = "true";
已设置……但似乎 jQuery 的 Ajax API 并没有为此提供任何机制。
有什么我错过了吗?我还有其他方法可以做到吗?
功能应该在 jQuery 1.5 中被破坏。
从 jQuery 1.5.1 开始,你应该使用 xhrFields 参数。
$.ajaxSetup({
type: "POST",
data: {},
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true
});
文档:http : //api.jquery.com/jQuery.ajax/
报告的错误:http : //bugs.jquery.com/ticket/8146
您可以使用beforeSend
回调来设置其他参数(XMLHTTPRequest
对象作为其唯一参数传递给它)。
正如您所知,这种类型的跨域请求在正常站点场景中不起作用,在任何其他浏览器中也不起作用。我什至不知道 FF 3.5 强加了哪些安全限制,只是为了让您不要白白撞墙:
$.ajax({
url: 'http://bar.other',
data: { whatever:'cool' },
type: 'GET',
beforeSend: function(xhr){
xhr.withCredentials = true;
}
});
要注意的另一件事是,jQuery 设置为规范浏览器差异。您可能会发现 jQuery 库施加了进一步的限制,禁止此类功能。
在 jQuery 3 和可能更早的版本中,以下更简单的配置也适用于单个请求:
$.ajax(
'https://foo.bar.com,
{
dataType: 'json',
xhrFields: {
withCredentials: true
},
success: successFunc
}
);
我在 Firefox Dev Tools -> Network 选项卡(在单个请求的 Security 选项卡中)中得到的完整错误是:
连接到 foo.bar.com 期间发生错误。SSL 对等方无法协商可接受的安全参数集。错误代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT