среда, 8 июня 2011 г.

Виды кроссдоменных запросов

Рассмотрим виды кроссдоменных запросов. Также укажу какие модули для этого можно использовать из YUI3.


1) JSONP. Наверно самый первый способ. Поскольку на обьект XMLHttpRequest до последнего времени браузерами накладывались ограничения политики "same-origin policy"(скрипты со страницы могли(и в принципе могут) по аяксу обращаться только к серверу, который отдал браузеру эту страницу.), то его для кроссдоменного запроса использовать было нельзя.
Поэтому скрипт из нашего родного сервера, добавлял новый элемент "скрипт" в ДОМ, а в сорсе указывал адресс сервера предоставляющего сервис. При этом в этом урле по договоренным правилам добавлялось имя колбека, который будет вызван скриптом, загруженным с чужого сервера. При этом в этот колбек передасться обьект с джейсоном.
Использовать этот метод можно только из доверенных источников.

В YUI3 это умеет:
  Get - модуль.

2) Использование флеша. Можно писать скрипты на ActioinScript3 и такая свифка будет обращаться к чужому серверу, а полученные данные передавать нашему явасприпту или во флеше все и будет сделано.
Единственное что то на чужом сервере должен обязательно присутсвовать в корне файл crossdomain.xml, в котором находится разрешение на предоставление ресурсов страницам с нашего домена(сервера). Плагин флеша в браузере будет проверять наявность этого файла и пермишинов в нем, если файла и пермишинов не будет флеш не будет грузить ресурс. 

В YUI3 это умеет: IO - модуль. А точнее его подмодуль io-xdr, в его конфиги нужно поставить: xdr: { use: 'flash'}. Среди файлов фреймворка yui3 есть файл io.swf, который и делает магию.

3) Использование нововведения в XMLHttpRequest, так называемых нейтивных кроссдоменных запросов. Некоторые А-уровневые браузеры поддреживают это нововведение. При этом сревер на подобный запрос должен ответить заголовком "Access-Control-Allow-Origin" со значением позволяющее делать клиенту такие запросы.
Так называемый CORS-протокол

В YUI3 это умеет: IO - модуль. А точнее его подмодуль io-xdr, в его конфиги нужно поставить: xdr: { use: 'native'}. Модуль пытается выполнить запрос, если обнаруживает, что браузер не поддерживает нейтивные кроссдоменные запросы, то пытается спасти ситуацию вызовом флеша.

Комментариев нет:

Отправить комментарий