Надсилання облікових даних із міждоменними публікаціями?


81

Відповідно до Запити з обліковими даними , Firefox буде надсилати облікові дані разом із міждоменними публікаціями, якщо

invocation.withCredentials = "true";

встановлено ... Але, схоже, Ajax API jQuery не передбачає жодного механізму для цього.

Щось я пропустив? Чи є якийсь інший спосіб я можу це зробити?

Відповіді:


168

Передбачається, що функціональність порушена в 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
Тепер я можу надіслати cookie до субдомену :) Дякую!
Радек,

7
Чи це має працювати для крос-запитів (не-субдоменів) ajax?
вуличне світло

Я все ще отримую запит на отримання вірчих грамот
Джон Грабанський

@JohnGrabanski Ви вирішили проблему?
Сельман,

41

Ви можете використовувати beforeSendзворотний виклик для встановлення додаткових параметрів ( XMLHTTPRequestоб’єкт передається йому як єдиний параметр).

Тільки щоб ви знали, цей тип міждоменного запиту не буде працювати в звичайному сценарії сайту, а також не в будь-якому іншому браузері. Я навіть не знаю, які обмеження безпеки також накладає FF 3.5, щоб просто нічого не бити головою об стіну:

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

Ще однієї речі, якої слід остерігатися, є те, що jQuery налаштований для нормалізації відмінностей браузера. Ви можете виявити, що бібліотека jQuery накладає додаткові обмеження, які забороняють цей тип функціональності.


2
Відповідно до api.jquery.com/jQuery.post, це має бути тип: "GET", а не метод: "GET" Я спіткнувся про нього, використовуючи ваш приклад
Xosofox

1
@Xosofox Я знаю, що це старий коментар, але станом на jQuery 1.9 method: 'GET'підтримується. api.jquery.com/jquery.ajax
Бред

1
Зверніть увагу, що це більше не працює в jQuery 3+, оскільки (a) API цієї функції змінився, і (b) він більше не має доступу до об'єкта XHR, який створюється після запуску цієї функції. Натомість слід використовувати xhrFields.
cuniculus

2

У 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.