【问题标题】:Sending credentials with cross-domain posts?使用跨域帖子发送凭据?
【发布时间】:2011-01-04 11:43:39
【问题描述】:

根据Requests with credentials,如果

invocation.withCredentials = "true";

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

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

【问题讨论】:

    标签: javascript jquery cross-domain


    【解决方案1】:

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

    请注意,这种类型的跨域请求在正常站点场景中不起作用,并且不适用于任何其他浏览器。我什至不知道 FF 3.5 也施加了哪些安全限制,以免你无缘无故地撞墙:

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

    还有一点需要注意,jQuery 是为了规范浏览器差异而设置的。您可能会发现 jQuery 库施加了更多限制,禁止此类功能。

    【讨论】:

    • 根据api.jquery.com/jQuery.post 它应该是类型:“GET”而不是方法:'GET' 我在使用你的例子时绊倒了它
    • @Xosofox 我知道这是一条旧评论,但从 jQuery 1.9 开始,支持method: 'GET'api.jquery.com/jquery.ajax
    • 请注意,这在 jQuery 3+ 中不再有效,因为 (a) 此函数的 api 已更改,并且 (b) 它不再有权访问在此之后创建的 XHR 对象函数运行。相反,您应该使用 xhrFields。
    【解决方案2】:

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

    【讨论】:

    • 现在我可以发送 cookie 到子域 :) 谢谢!
    • 这是否也适用于跨(非子域)ajax 请求?
    • 我仍然收到提示输入凭据
    • @JohnGrabanski 你解决了你的问题吗?
    • 我很困惑,您在哪里添加实际凭据?
    【解决方案3】:

    在 jQuery 3 甚至更早的版本中,以下更简单的配置也适用于单个请求:

    $.ajax(
            'https://foo.bar.com,
            {
                dataType: 'json',
                xhrFields: {
                    withCredentials: true
                },
                success: successFunc
            }
        );
    

    我在 Firefox 开发工具 -> 网络选项卡(在单个请求的安全选项卡中)遇到的完整错误是:

    连接到 foo.bar.com.SSL 对等体期间发生错误 无法协商一组可接受的安全参数。错误 代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 2012-06-09
      • 2013-11-22
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多