Политика одинакового происхождения JavaScript — как она применяется к разным субдоменам?

Как единая политика происхождения применяется к следующим двум доменам?

http://server1.MyDomain.com

http://server2.MyDomain.com

Могу ли я запустить JS на странице, размещенной на сервере 1, если содержимое получено с сервера 2?

редактировать в соответствии с ответом Даниэля ниже, я могу включать сценарии между разными субдоменами, используя тег <script>, но как насчет асинхронных запросов? Что, если я загружу скрипт с сервера 2 на страницу, размещенную на сервере 1. Могу ли я использовать сценарий для асинхронного взаимодействия со службой на сервере server2?


person DaveDev    schedule 30.03.2010    source источник
comment
Пробег будет немного отличаться от IE, но общее правило — тот же хост, тот же порт для прямого XHR. Вы можете загружать скрипты откуда угодно, но что касается асинхронности, внедрение скриптов JSONP — ваш единственный вариант без прокси.   -  person Sky Sanders    schedule 30.03.2010


Ответы (2)


Вы можете включать сценарии между разными субдоменами только с помощью тега <script>, так как он не подпадает под действие политики.

Используя http://www.example.com/dir/page.html в качестве источника (из Википедии):

Compared URL                               Outcome  Reason
---------------------------------------------------------------------------------------------
http://www.example.com/dir/page.html       Success  Same protocol and host
http://www.example.com/dir2/other.html     Success  Same protocol and host
http://www.example.com:81/dir2/other.html  Failure  Same protocol and host but different port
https://www.example.com/dir2/other.html    Failure  Different protocol
http://en.example.com/dir2/other.html      Failure  Different host
http://example.com/dir2/other.html         Failure  Different host (exact match required)
http://v2.www.example.com/dir2/other.html  Failure  Different host (exact match required)

ОБНОВЛЕНИЕ:

Могу ли я использовать сценарий для асинхронного взаимодействия со службой на сервере server2?

Да, вы можете использовать JSONP, который использует преимущества открытой политики для тегов <script> для получения JSON. из других источников.

Вы также можете рассмотреть возможность использования обратного прокси-сервера, как описано в следующем сообщении Stack Overflow:

person Daniel Vassallo    schedule 30.03.2010
comment
@Daniel, спасибо за ответ. Я отредактировал вопрос с дополнительным вопросом. Есть ли шанс, что вы могли бы добавить свои мысли к нему? Спасибо - person DaveDev; 30.03.2010
comment
@Dave: Возможно, вы захотите проверить JSONP. Вы также можете рассмотреть возможность настройки обратного прокси, как описано здесь: stackoverflow.com/questions/2482916/ - person Daniel Vassallo; 30.03.2010
comment
Это отличный, исчерпывающий ответ. - person wprl; 27.06.2012

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

То, что вы описываете, - это шаблон под названием jsonp. Когда сервер на другом хосте возвращает скрипт, который вы вставляете на свою страницу, и скрипт вызывает функцию на вашей странице с аргументами ответа.

person Andreas Köberle    schedule 30.03.2010