CORS withCredentials XHR preflight не публикует Cookies в Firefox
Я пытаюсь сделать сообщение CORS XHR w/credentials. Он отлично работает в Chrome, но не в Firefox. Печеньки не присутствуют в заголовках запроса перед полетом, и поэтому я вижу 302. Это отлично работает в Chrome, поскольку файлы cookie находятся в заголовках запроса перед полетом, и последующий POST проходит.
Почему бы не работать в FF? Что мне не хватает?
// assume url, boundEventHandler and uploadData are defined, as this definitely works in Chrome
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.addEventListener ("readystatechange", boundEventHandler, false);
xhr.withCredentials = true; // FWIW, I've also tried the string 'true'
xhr.send(uploadData);
Любые идеи? Я вижу некоторые сообщения, которые говорят, что я могу проксировать запрос на стороне сервера, но я бы предпочел, чтобы это работало в соответствии со спецификацией CORS.
Спасибо!
Ответы
Ответ 1
В параметре https://www.w3.org/TR/cors/#resource-preflight-requests запрос предполетной защиты никогда не включает файлы cookie. В частности, спецификация говорит:
- Исключить учетные данные пользователя.
и ссылается на https://www.w3.org/TR/cors/#user-credentials, в котором говорится:
Термин учетные данные пользователя для целей настоящей спецификации означает файлы cookie, HTTP-аутентификация и клиентский SSL (...).
Тем не менее, фрагмент кода, который вы цитируете выше, не должен включать предполетный просмотр вообще: нет прослушивателей событий загрузки, метод такой же простой, и нет набора заголовков авторов. Поэтому, если вы действительно видите запрос перед полетом, первый вопрос - почему это происходит. Есть ли у вас какие-либо расширения в Firefox, которые могут помечать ваш объект XMLHttpRequest?
Ответ 2
Теперь Chromium (4 июля 2014 года) не отправляет cookie с запросом предполетной проверки.
https://code.google.com/p/chromium/issues/detail?id=377541