О кросс-доменной загрузке данных

Flash документ может загружать данные из внешних источников, используя один из следующих методов: XML.load(), XML.sendAndLoad(), LoadVars.load(), LoadVars.sendAndLoad(), loadVariables(), loadVariablesNum(). Также, SWF файл может импортировать общие (shared) библиотеки, определенные в другом SWF файле, во время проигрывания ролика. По умолчанию, данные в SWF ролике, в случае с shared библиотеками, должны находиться в одном домене с файлом, их загружающим.

Чтобы сделать данные в shared библиотеке доступными для SWF файлов в других доменах, используйте файл с кросс-доменными правилами (cross-domain policy file). Файл с кросс-доменными правилами представляет из себя XML файл, который дает возможность серверу "показать", что его данные и документы доступны для SWF файлов, находящихся в указанных в файле с правилами доменах. Любой SWF файл, который находится в домене, указанном в файле с правилами на сервере, будет иметь доступ к файлам и данным на этом сервере.

Когда Flash документ пытается получить доступ к файлу в другом домене, Flash Player автоматически пытается загрузить файл с правилами с этого домена. Если домен, в котором находится Flash документ, включен в файл с правилами, он получает доступ к данным.

Файл с правилами должен иметь имя crossdomain.xml и может находиться в корневом или ином каталоге сервера (в последнем случае необходимо будет указать где при помощи ActionScript, смотри О произвольном расположении файлов с правилами). Файлы с правилами работают только на серверах, взаимодействующих по HTTP, HTTPS или FTP. Файл с правилами зависит от протокола и порта сервера, на котором он находится.

Например, файл с правилами, расположенный по адресу https://www.macromedia.com:8080/crossdomain.xml будет принимать запросы на прочтение, адресованные домену www.macromedia.com по протоколу HTTPS через порт 8080.

Исключением из правил является лишь использование объекта XMLSocket для соединения с сервером в другом домене. В этом случае, HTTP сервер, работающие через 80 порт в том же самом домене, что и сокет-сервер, должен предоставить доступ к файлу с правилами.

XML файл с правилами состоит из одного единственного тэга <cross-domain-policy>, который, в свою очередь, содержит 0, 1 или более тэгов <allow-access-from>. Каждый тэг <allow-access-from> содержит аттрибут domain, определяющий либо точный IP адрес, либо точное имя домена, либо групповой символ, указывающий на любой домен. Групповым символом может быть астерикс (*), соответствующий всем доменам и всем IP адресам, или астерикс с суффиксом, соответствующий всем доменам с таким суффиксам. Суффикс должен начинаться с точки. Однако, группы доменов с суффиксом могут соответствовать доменам, состоящим только из суффикса, без точки. Пример: foo.com есть часть *.foo.com. Групповые символы не разрешается использовать при задании IP адреса.

Если в правиле вы указываете IP адрес, доступ предоставляется только роликам, загружаемым с этого адреса, используя прямое указание IP (например, http://65.57.83.12/flashmovie.swf), но не роликам, загружаемым с указанием имени домена. Flash Player не производит DNS проверок.

Нижеследующий пример показывает файл с правилами, разрешающий доступ Flash роликам, располагающихся на узлах foo.com, www.friendOfFoo.com, *.foo.com и 105.216.0.40, к Flash ролику на foo.com:

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="www.friendOfFoo.com" />
  <allow-access-from domain="*.foo.com" />
  <allow-access-from domain="105.216.0.40" />
</cross-domain-policy>

Вы можете разрешить доступ для роликов, независимо от домена, в котором они находятся:

<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

Каждый тэг <allow-access-from> имеет необязательный аттрибут secure, по умолчанию имеющий значение true. Вы можете установить значение аттрибута равным false, если ваш файл с правилами располагается на сервере, использующем HTTPS, и вы хотите разрешить роликам на серверах, использующих HTTP, получать доступ к файлам на сервере, использующем HTTPS.

Установка аттрибута secure как false сводит на нет безопастность, предоставляемую HTTPS.

Если загружаемый SWF файл получается с HTTPS сервера, а загружающий находится на HTTP сервере, вам необходимо добавить аттрибут secure="false" к тэгу <allow-access-from>, как показано на примере:

<allow-access-from domain="www.foo.com" secure="false" /> 

Файл с правилами, не содержащий <allow-access-from> тэгов, равносилен его полному отсутствию.