使用跨域帖子发送凭据?

时间:2010-01-13 04:04:22

标签: javascript jquery cross-domain

根据Requests with credentials,如果

,Firefox只会发送凭据以及跨域帖子

invocation.withCredentials = "true";

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

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

3 个答案:

答案 0 :(得分:146)

在jQuery 1.5中应该打破功能。

从jQuery 1.5.1开始,你应该使用xhrFields param。

$.ajaxSetup({
    type: "POST",
    data: {},
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true
});

文档:http://api.jquery.com/jQuery.ajax/

报告错误:http://bugs.jquery.com/ticket/8146

答案 1 :(得分:39)

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

您知道,这种类型的跨域请求在普通站点方案中不起作用,而在任何其他浏览器中都不起作用。我甚至不知道FF 3.5所施加的安全限制,所以你不要无所事事地击败你的头:

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

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

答案 2 :(得分:0)

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

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

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

  

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