【发布时间】:2012-03-02 03:36:53
【问题描述】:
我有两台服务器。服务器 A 是一个内部服务器,可以从我办公室设置的外部世界访问。它上面运行着一个 Rails 服务器。我有第二台服务器,服务器 B,它包含我们所有的静态内容(图像、swfs、javascript、css 等),它是一个 Amazon S3 服务器。我已将所有这些文件公开访问。
我正在尝试将来自服务器 B 的 swf 放在服务器 A 提供的页面上。然后,该 swf 显示所需的其他资产从服务器 B 动态加载。然而,不幸的是,沿着它失败的方式,并且请求动态加载的文件永远不会到达。
基于我的浏览器控制台中的错误,swf 期望 crossdomain.xml 文件位于服务器 A 上。基于 this,它还需要一个位于我的 S3 服务器上。因此,在这种情况下,我创建了两个 crossdomain.xml 文件,每个服务器一个。
这是服务器 A 的 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>
<allow-access-from domain="s3-bucket-name.s3.amazonaws.com" />
</cross-domain-policy>
这是服务器 B 的 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>
另外,我在我的 swf 中显式加载服务器 B 的 crossdomain.xml 文件:
Security.loadPolicyFile("https://s3-bucket-name.s3.amazonaws.com/crossdomain.xml");
但是,无论我做什么,它都不起作用。我不确定还能尝试什么。我已经尝试在 SO 上查看许多解决方案,但没有任何东西可以帮助我解决我的问题。当然,其他人在这方面的经验比我多,可以给我一些指导,我现在几乎没有想法。
更新 用更多信息更新我的问题。
我尝试将两个策略文件都设置为 * 并且它开始工作直到它命中:
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.
此外,我运行了 Charles,它正在从我的本地服务器中提取 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 )
【问题讨论】:
-
(1) 你用的是URLLoader,还是Loader? (2) 将两个文件都更改为 domain="*" 看看会发生什么。 (3) 运行 Charles 或其他一些本地代理服务器,查看是否正在请求(和提供)文件。
-
1.装载机; 2.我刚试过这个,它开始加载直到它这样做:SecurityError:错误#2121:安全沙箱违规:Loader.content:s3.amazonaws.com/bucket_name/swfs/foo.swf无法访问s3.amazonaws.com/bucket_name/data/swfs/bar.swf。这可以通过调用 Security.allowDomain 来解决。
-
此外,我运行了 Charles,它正在从我的本地服务器中提取 crossdomain.xml,但我在 s3 中看不到它。
标签: actionscript-3 amazon-s3 flash crossdomain.xml