Как работают коллажи с политикой одного и того же orgin?

11

Если Javascript разрешен только доступ к сценариям из того же домена, как веб-сайт может создавать гибридные приложения, которые должны читать и изменять содержимое из другого домена?

Джек Ричардсон
источник

Ответы:

7

Кросс-браузерные решения

JSONP

Если API, к которому вы пытаетесь получить доступ, поддерживает JSONP , вам нужно только указать имя функции javascript в своем запросе, тогда JSONP возвращает javascript, myfunc({the:data});который вы можете запускать как обычный javascript, поэтому вы должны создать новый <script src="www.website.com/somecall?jsonp=myfunc">тег для «отправить запрос» (jQuery делает это автоматически, если вы используете type: jsonpв $.ajaxзапросах).

Недостатком является то, что для поддержки JSONP требуется поставщик API.

вспышка

Flash может получить доступ к содержимому между доменами, если на целевом веб-сайте есть crossdomain.xmlфайл, в котором указано, что он разрешает это, что обычно имеет место на серверах, которые предоставляют API).

Недостатком является то, что для этого требуется Flash в браузере пользователя, а веб-сайт, с которого вы получаете данные, должен иметь файл crossdomain.xml, который разрешает запросы между доменами.

Серверный скрипт на том же доменном имени

Языки на стороне сервера, такие как PHP, не имеют ограничений BS в одном домене, поэтому вы можете иметь скрипт, который действует как прокси (например, загрузка через одно из расширений http, например cURL).

Дополнительным преимуществом является то, что вы можете очистить данные (или даже скопировать несколько источников) на сервере, прежде чем перенаправлять их на свою веб-страницу / javascript, чтобы вы могли даже извлечь только полезную часть данных, что удобно при работе в мобильном веб-приложении. где пропускная способность может быть проблемой.

Недостатком является то, что все запросы должны проходить через ваш сервер, что увеличивает нагрузку на ваш сервер.

Однако преимущество заключается в том, что он будет работать с любым ресурсом, поскольку для него не требуется, чтобы цель поддерживала кросс-домен или jsonp. Так что, если ничего не работает, это будет.


Решения, характерные для некоторых браузеров

Internet Explorer

Internet Explorer имеет кросс-доменный запрос

Fire Fox

Firefox 3.5+ имеет стандарт обмена между источниками , но он требует ресурсов, к которым вы пытаетесь получить доступ, для включения специальных заголовков, например, в PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

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


Firefox также имеет пользовательские настройки capability.policy.default.XMLHttpRequest.open, но я бы не стал рассчитывать, что пользователь изменит настройки в своем браузере.

wildpeaks
источник
0

Вы можете использовать API (другого домена) для этого. Ваш Javascript вызовет файл PHP (или другой файл сценария), который находится на вашем веб-сервере (вашем домене), который вызовет API (другого домена, использующего CURL) и получит ответ от вас.

Хариш Куруп
источник
Этот ответ не должен быть настолько конкретным в отношении технологии, используемой на сервере.
funkybro
@funkybro да, это был просто пример ... ничего конкретного ...
Хариш Куруп