Отправка учетных данных междоменными сообщениями?
Согласно Запросы с учетными данными, Firefox будет отправлять только учетные данные вместе с сообщениями в разных доменах, если
invocation.withCredentials = "true";
установлен... Но это не похоже на jQuery. API Ajax предоставляет любой механизм для этого.
Есть ли что-то, что я пропустил? Есть ли другой способ, которым я могу это сделать?
Ответы
Ответ 1
Предполагается, что функционал будет разбит на 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
Ответ 2
Вы можете использовать обратный вызов beforeSend
для установки дополнительных параметров (объект XMLHTTPRequest
передается ему как единственный параметр).
Просто, чтобы вы знали, этот тип междоменного запроса не будет работать в обычном сценарии сайта, а не в любом другом браузере. Я даже не знаю, какие ограничения безопасности накладывают FF 3.5, просто чтобы вы не били головой о стену ни за что:
$.ajax({
url: 'http://bar.other',
data: { whatever:'cool' },
type: 'GET',
beforeSend: function(xhr){
xhr.withCredentials = true;
}
});
Еще одна вещь, о которой стоит опасаться, заключается в том, что jQuery настроен на нормализацию различий браузера. Вы можете обнаружить, что дополнительные ограничения накладываются библиотекой jQuery, которые запрещают этот тип функций.
Ответ 3
В jQuery 3 и, возможно, более ранних версиях, следующая упрощенная конфигурация также работает для отдельных запросов:
$.ajax(
'https://foo.bar.com,
{
dataType: 'json',
xhrFields: {
withCredentials: true
},
success: successFunc
}
);
Полная ошибка, которую я получал в Firefox Dev Tools → вкладке "Сеть" (на вкладке "Безопасность" для отдельного запроса):
При подключении к foo.bar.com.SSL произошла ошибка. не удалось согласовать допустимый набор параметров безопасности. код: SSL_ERROR_HANDSHAKE_FAILURE_ALERT