資格情報を含むリクエストによると、Firefoxはクロスドメイン投稿とともに資格情報を送信するのは
invocation.withCredentials = "true";
が設定されています…しかし、jQueryのAjaxAPIがこのためのメカニズムを提供しているようには見えません。
私が見逃したものはありますか?他にできる方法はありますか?
回答:
jQuery1.5では機能が壊れているはずです。
jQuery 1.5.1以降、xhrFieldsparamを使用する必要があります。
$.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;
}
});
注意すべきもう1つのことは、jQueryがブラウザーの違いを正規化するように設定されていることです。このタイプの機能を禁止するjQueryライブラリによってさらに制限が課せられる場合があります。
method: 'GET'
サポートされています。 api.jquery.com/jquery.ajax
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