Загрузка данных с других доменов

Ситуации, когда необходимо подгрузить данные из другого домена (отличного от того, на котором находится приложение) встречаются весьма редко. Однако предположим, что наше приложение находиться по адресу http://app.mydomain.com, данные по адресу http://data.mydomain.com, а скрипт для загрузки данных называется "data.php".

При попытке загрузить данные стандартным путём произойдёт ошибка, т.к. все браузеры блокирует междоменные операции из-за соображений безопасности, даже если вы буду использовать другой порт.

Библиотека Webix позволяет обойти подобные блокировки. Для создания запросов можно использовать протокол CORS. - Загрузка JSONP только для GET запросов.

Вы не сможете загружать данные с помощью метода load, но сможете создавать запросы и парсить возвращаемые данные в коллбэк.

Cross-Origin Resource Sharing

CORS требует дополнительную конфигурацию на сервере. Сервер должен разрешать любой программе с домена приложения запрашивать и получать данные с этого сервера.

Когда вы создаёте AJAX запрос с помощью Webix AJAX:

webix.ajax("http://data.mydomain.com/data.php", function(text, data){
    table.parse(data.json());
});

браузер отправляет следующий заголовок с HTTP запросом:

Origin: http://app.mydomain.com

Вам необходимо создать ответ с сервера с данными со специальным заголовком, который также "разрешит" получать данные.

Сервер приложения разрешает получать данные от сервера с данными:

Access-Control-Allow-Origin: http://app.mydomain.com

Это можно сделать тремя способами:

  • Настроить сервер;
  • Подогнать код вашего приложения так, чтобы заголовок был частью серверного ответа;
  • Использовать стороннее API, где сервер уже настроен под CORS протокол.

Детальную информацию о CORS читайте в статье на Википедии.

Преимущества

CORS - стандартный и безопасный вариант, который можно использовать с любыми данными (структурированными или нет). Также протокол поддерживает все типы запросов – GET, POST, PUT, DELETE, и т.д.

Недостатки

IE8 и IE9 не поддерживают протокол CORS.

Наверх