Как организовать кроссдоменные запросы?

Что-то вроде рекламной сети. Сайты подключают скрипт, мне нужно отправить и получить данные с нашего сервера, а потом модифицировать страницу. Скрипт написан на Google Closure Lib.
Начал экспериментировать.
CORS (XhrIo) - данные отправляются и получаются, но сервер не может на свой домен поставить куку. Значит применять бессымысленно - для нас в каждый раз пользователь будет уникальным.
JSONP (Jsonp) - всё идеально, уже выпустили альфу и тут выясняем, что иногда не будем укладываться в отпущенные 2000 символов гет-запроса.
IFRAme (IframeIo) - данные отправляются, куки ставятся, но не получаются (что логично) - "Access denied to content document".

Вроде я использовал все подходы, неужели нет нормального решения? Может кто знает, как устроены скрипты у яндекс-директа или бегуна или подобных?
  • Вопрос задан
  • 10592 просмотра
Пригласить эксперта
Ответы на вопрос 2
egor_nullptr
@egor_nullptr
CORS с загловком в ответе Access-Control-Allow-Credentials: true позволяет устанавливать и передавать куки.
https://developer.mozilla.org/en-US/docs/Web/HTTP/...
Ответ написан
miraage
@miraage
Старый прогер
Я не церемонюсь и проксирую запрос через свой бэкенд.
Да, это лишний запрос.
Но, это лишает меня абсолютной всей головной боли.

// 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');


У меня такая схема работала.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы