У меня есть два сервера. Сервер A - это внутренний сервер, который имеет доступ из внешнего мира, установленного здесь, в моем офисе. На нем работает Rails-сервер. У меня есть второй сервер, сервер B, содержащий весь наш статический контент (изображения, swfs, javascript, css и т. Д.), Это сервер Amazon S3. Я предоставил всем этим файлам общий доступ.Написание Flash crossdomain.xml для Amazon S3
Я пытаюсь поместить swf с сервера B на страницу, обслуживаемую сервером A. Затем другие активы, которые требуется SWF для отображения, получают динамически загруженную с сервера B. К сожалению, однако, где-то рядом то, как он терпит неудачу, и файлы, которые запрашиваются для динамической загрузки, просто не прибывают.
Исходя из ошибок в моей консоли браузера, swf ожидает, что файл crossdomain.xml будет находиться на сервере A. На основе this ему также нужен тот, который будет на моем сервере S3. Итак, в этом случае я создал два файла crossdomain.xml, по одному для каждого сервера.
Это crossdomain.xml файл на сервере A в:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="s3-bucket-name.s3.amazonaws.com" />
</cross-domain-policy>
Это crossdomain.xml файл-сервер Б:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.server-a.com"/>
<allow-http-request-headers-from domain="*.server-a.com" headers="SOAPAction"/>
</cross-domain-policy>
Кроме того, я явно загрузки файла crossdomain.xml сервера B в моей swf:
Security.loadPolicyFile("https://s3-bucket-name.s3.amazonaws.com/crossdomain.xml");
Независимо от того, что я делаю, однако, это просто не работает. Я не уверен, что еще попробовать. Я пробовал просмотреть несколько решений здесь, но ничто не помогло мне решить мою проблему. Конечно, у кого-то еще больше опыта в этом, чем у меня, и могу дать мне некоторое руководство, я в значительной степени из идей на данный момент.
Обновление Обновление моего вопроса с дополнительной информацией.
Я попытался установить оба файла политики на * и он начал работать, пока он не попал:
SecurityError: Error #2121: Security sandbox violation: Loader.content: s3.amazonaws.com/bucket_name/swfs/foo.swf cannot access s3.amazonaws.com/bucket_name/data/swfs/bar.swf. This may be worked around by calling Security.allowDomain.
Кроме того, я побежал Чарльз и тянет crossdomain.xml как от моего локального сервера, но я не см. его для s3.
Update 2 Я попытался добавить это к загрузчику:
var context:LoaderContext = new LoaderContext();
context.securityDomain = SecurityDomain.currentDomain;
context.applicationDomain = ApplicationDomain.currentDomain;
Loader.load(new URLRequest(_dataFile), context);
Это привело файлы на самом деле загрузки! К сожалению, в настоящее время он выходит из строя с этим:
SecurityError: Error #2119: Security sandbox violation: caller s3.amazonaws.com/bucket_name/swfs/MainSwf.swf cannot access LoaderInfo.applicationDomain owned by s3.amazonaws.com/bucket_name/data/swfs/foo/SecondSwf.swf
Я попытался включая/не включая context.applicationDomain = ApplicationDomain.currentDomain;
линию, но это не решило проблему.
Если авария на самом деле происходит это в более позднее время после того, как файл будет загружен, когда мы получаем в ApplicationDomain: loader_.contentLoaderInfo.applicationDomain.getDefinition(def.a)
(1) Вы используете URLLoader, или это Loader? (2) Измените оба файла на domain = "*" и посмотрите, что произойдет. (3) Запустите Charles или какой-нибудь другой локальный прокси-сервер и посмотрите, запрашиваются ли файлы (и обслуживаются). – Manish
1. Погрузчик; 2. Я просто попробовал это, он начал загружаться, пока не сделал это: SecurityError: Ошибка # 2121: нарушение безопасности изолированной среды: Loader.content: http://s3.amazonaws.com/bucket_name/swfs/foo.swf не может получить доступ к https: //s3.amazonaws.com/bucket_name/data/swfs/bar.swf. Это можно обойти, вызвав Security.allowDomain. – keybored
Кроме того, я запустил Чарльза, и он перетаскивает crossdomain.xml с моего локального сервера, но я не вижу его для s3. – keybored