У меня есть два сервера.Сервер A - это внутренний сервер, доступ к которому есть из внешнего мира, установленного здесь, в моем офисе.На нем запущен сервер Rails.У меня есть второй сервер, сервер B, который содержит весь наш статический контент (изображения, swfs, javascript, css и т. Д.), Это сервер Amazon S3.Я предоставил всем этим файлам открытый доступ.
Я пытаюсь поместить SWF-файл с сервера B на страницу, обслуживаемую сервером A. Затем другие ресурсы, которые требуются SWF для отображения, становятся динамически.загружается с сервера B. Однако, к сожалению, где-то по пути происходит сбой, и файлы, которые запрашиваются для динамической загрузки, просто не приходят.
На основании ошибок в консоли браузера SWF ожидает файл crossdomain.xml.файл должен быть на сервере А. На основании этого он также должен быть на моем сервере 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>
Это кросс-домен сервера B.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");
Независимо от того, что я делаю, он просто не работает,Я не уверен, что еще попробовать.Я попытался просмотреть ряд решений здесь, на SO, но ничто не помогло мне решить мою проблему.Конечно, у кого-то еще было больше опыта в этом, чем у меня, и он может дать мне некоторые рекомендации, на данный момент у меня почти нет идей.
Обновление Обновление моего вопроса с некоторыми другимиinfo.
Я попытался установить оба файла политики на *, и он начал работать, пока не нажал:
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.
Обновление 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;
, но это не решило проблему.
Где происходит сбой на самом делепроисходит позже, после загрузки файла, где мы получаем домен приложения: loader_.contentLoaderInfo.applicationDomain.getDefinition( def.a )