Я не церемонюсь и проксирую запрос через свой бэкенд.
Да, это лишний запрос.
Но, это лишает меня абсолютной всей головной боли.
// upd
Насколько я помню, схема такая:
- браузер запрашивает сторонний сервер
- xmlhttprequest сначала посылает
OPTIONS запрос
Вы, в свою очередь, диспатчите этот запрос.
Нужны кукисы - ставьте
AllowCredentials. В таком случае,
AllowOrigin * не работает. Есть обход. Вы проверяете реферера, и сами выставляете. Приведу пример на PHP.
<?php
$ref = $_SERVER['HTTP_REFERER'];
header('Access-Control-Allow-Origin: ' . $ref);
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Request-Headers: Accept, X-Requested-With');
header('Access-Control-Allow-Credentials: true');
У меня такая схема работала.