使用跨域帖子发送凭据?

IT技术 javascript jquery cross-domain
2021-01-15 07:57:42

根据带有凭据的请求,Firefox 只会在以下情况下发送凭据以及跨域帖子

invocation.withCredentials = "true";

已设置……但似乎 jQuery 的 Ajax API 并没有为此提供任何机制。

有什么我错过了吗?我还有其他方法可以做到吗?

3个回答

功能应该在 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

我仍然收到提示输入凭据的提示
2021-03-17 07:57:42
这是否也适用于跨(非子域)ajax 请求?
2021-03-25 07:57:42
@JohnGrabanski 你的问题解决了吗?
2021-03-25 07:57:42
现在我可以将 cookie 发送到子域 :) 谢谢!
2021-03-30 07:57:42
我很困惑,您在哪里添加实际凭据?
2021-04-04 07:57:42

您可以使用beforeSend回调来设置其他参数(XMLHTTPRequest对象作为其唯一参数传递给它)。

正如您所知,这种类型的跨域请求在正常站点场景中不起作用,在任何其他浏览器中也不起作用。我什至不知道 FF 3.5 强加了哪些安全限制,只是为了让您不要白白撞墙:

$.ajax({
    url: 'http://bar.other',
    data: { whatever:'cool' },
    type: 'GET',
    beforeSend: function(xhr){
       xhr.withCredentials = true;
    }
});

要注意的另一件事是,jQuery 设置为规范浏览器差异。您可能会发现 jQuery 库施加了进一步的限制,禁止此类功能。

@Xosofox 我知道这是一个旧评论,但从 jQuery 1.9 开始,method: 'GET'支持。 api.jquery.com/jquery.ajax
2021-03-28 07:57:42
根据api.jquery.com/jQuery.post它应该是类型:“GET”而不是方法:'GET'我在使用你的例子时绊倒了它
2021-04-02 07:57:42
请注意,这在 jQuery 3+ 中不再有效,因为 (a) 此函数的 api 已更改,以及 (b) 它不再有权访问在此函数运行后创建的 XHR 对象。相反,您应该使用 xhrFields。
2021-04-05 07:57:42

在 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