Реализация кроссдоменных запросов в js
В целях безопасности XMLHttpRequest разрешено делать только в рамках текущего сайта, запрещено использовать другой домен, порт либо протокол. В настоящее время современный XMLHttpRequest предусматривает кросс-доменные запросы, однако не всеми браузерами поддерживается данная возможность. Для обхода данной проблемы существует несколько библиотек, среди которых jsonp, и easyXDM. В данной статье рассмотрим подробней использование easyXDM.
Из официальной документации easyXDM:
easyXDM предоставляет транспортный стек, способный передавать строковые сообщение между двумя окнами, клиентом (основной документ) и провайдером (документ включен используя iframe). В easyXDM реализовано несколько методов, и он всегда выбирает наиболее эффективный для текущего браузера. Для всех реализаций транспортный стек предоставляет двунаправленность, надежность, очевидность и проверку отправителя.
В ie6 и ie7 используется Microsoft Security Bulletin MS11-018, отправка реализуется через flash транспорт. Для IE8+, Firefox 3+, Safari 4+, Chrome 2+, Opera 9+ используется отправка через PostMessageTransport. Для Firefox версии ниже 3 используется FrameElementTransport.
Рассмотрим пример использования данной библиотеки. Для использования на стороне клиента нам необходим файл easyXDM.js, а на стороне получателя сообщений расположим всю библиотеку. Создадим экземпляр easyXDM:
var rpc = new easyXDM.Rpc(
{remote: origin + provider},
{remote: {request: {}}}
);
В переменных origin и provider зададим путь к домену с которым устанавливаем общением и провайдеру xdm.
var origin = 'http://domain.local';
var provider = '/easyXDM/provider/index.html';
Соответственно по пути 'http://domain.local/easyXDM/provider/index.html', должен располагаться файл провайдера easyXDM.
Далее можем описать запрос к нашему стороннему домену.
rpc.request({
url: origin + '/generateWidgetData/' + user_id + '?url=' + encodeURI(window.location.href),
method: 'GET'
}, function (response) {
//todo do something
});
В свойстве url, задаём путь кросс доменного запроса, а переменной response будет находиться ответ сервера.
Вот таким простым способом можно наладить общение двух сторонних доменов. Кросс доменные запросы чаще всего используются для создания различных виджетов на сайте клиента или сбора статистики.