Отправка учетных данных междоменными сообщениями?

Согласно Запросы с учетными данными, 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