通过跨域post发送凭证?
根据具有凭据的请求 ,Firefox将只会发送证书以及跨域post
invocation.withCredentials = "true";
设置…但似乎并不像jQuery的Ajax API提供了这个任何机制。
有什么我错过了吗? 有其他的方式可以做到吗?
jQuery 1.5中应该会破坏function。
由于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
callback来设置其他参数(将XMLHTTPRequest
对象作为唯一parameter passing给它)。
只是你知道,这种types的跨域请求不能在正常的站点场景中运行,也不能在任何其他浏览器中运行。 我甚至不知道FF 3.5所强加的安全限制,只是为了不让你的头靠在墙上,
$.ajax({ url: 'http://bar.other', data: { whatever:'cool' }, type: 'GET', beforeSend: function(xhr){ xhr.withCredentials = true; } });
还有一件事要注意的是,jQuery的设置正常化浏览器的差异。 您可能会发现,jQuery库禁止这种types的function进一步限制。
在jQuery 3和更早的版本中,以下更简单的configuration也适用于单个请求:
$.ajax( 'https://foo.bar.com, { dataType: 'json', xhrFields: { withCredentials: true }, success: successFunc } );
我在Firefox开发工具 – >networking选项卡(在单个请求的安全选项卡)得到完整的错误是:
在连接到foo.bar.com.tw时发生错误.SSL peer无法协商一组可接受的安全参数。错误代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT