Политика одинакового происхождения JavaScript - как она применяется к разным поддоменам? - PullRequest
19 голосов
/ 30 марта 2010

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

http://server1.MyDomain.com

http://server2.MyDomain.com

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

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

Ответы [ 2 ]

24 голосов
/ 30 марта 2010

Вы можете включать сценарии только между разными поддоменами, используя тег <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)

UPDATE:

Могу ли я использовать скрипт для общения асинхронно с сервисом на server2

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

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

0 голосов
/ 30 марта 2010

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

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

...