Apache flex 从AmazonS3加载swf-跨域策略

Apache flex 从AmazonS3加载swf-跨域策略,apache-flex,actionscript-3,flash,crossdomain.xml,Apache Flex,Actionscript 3,Flash,Crossdomain.xml,我有一个flash应用程序位于domainA,它需要加载一个来自Amazon S3 bucket的swf。 在加载时,我得到以下错误“错误#2044:未处理的安全性错误:。文本=” 我已经把一个跨域文件放进了存储桶,并假设这样就可以了。 如何修复此问题?您的跨域文件需要位于正在加载的flash应用程序的服务器上,而不是加载的文件。然后将S3域指定为允许的域 <allow-access-from domain="s3.amazonaws.com" /> : 每当Flash Playe

我有一个flash应用程序位于domainA,它需要加载一个来自Amazon S3 bucket的swf。 在加载时,我得到以下错误<代码>“错误#2044:未处理的安全性错误:。文本=”

我已经把一个跨域文件放进了存储桶,并假设这样就可以了。
如何修复此问题?

您的跨域文件需要位于正在加载的flash应用程序的服务器上,而不是加载的文件。然后将S3域指定为允许的域

<allow-access-from domain="s3.amazonaws.com" />

每当Flash Player 7检测到 域外数据加载请求, 播放机尝试查找策略文件 在尝试从中删除的服务器上 加载数据。如果存在策略文件 它允许访问源代码 制作动画的Flash电影的领域 请求,则操作成功

然而,我们在我们的一个客户端网站上做了同样的事情(从远程Amazon服务器将图像加载到flash组件中),但是我们的
crossdomain.xml
文件位于加载web服务器的根目录中。Amazon bucket不包含任何策略文件

那么我们的网站是如何运作的呢?根据文件,它不应该

编辑2


根据Wouter的评论,我所做的是一个特例,它解释了为什么即使我的跨域文件位于错误的位置,它对我仍然有效…

加载swf文件与加载数据并不完全相同。因此,您可能需要的不仅仅是crossdomain.xml。要查看crossdomain.xml文件的查找位置,我建议使用“嗅探”工具(如httpfox)查看Flash播放器查找该文件的位置


要允许来自不同域的swf进行交互,还需要调用
Security.allowDomain
。有关详细信息,请参阅。

您可以使用bucket name DNS访问S3。因此,它不是s3.amazon.com/bucketname/filename,而是bucketname.s3.amazon.com/filename。使用此方法,您可以将自己的跨域文件放在根路径中

<allow-access-from domain="bucketname.s3.amazonaws.com" />

更好的方法是使用DNS服务器上的CNAME记录来伪造跨域文件的根。e、 g

在DNS服务器上制作CNAME记录,将bucketname.yourdomainname.com指向bucketname.s3.amazon.com

然后将您的跨域文件放到该根目录中

<allow-access-from domain="bucketname.yourdomainname.com" />


请将flash文件称为bucketname.yourdomainname.com/flash.swf等

我很确定您已经了解了这一点,跨域文件需要位于加载数据的服务器上,并且指定的域是swf文件的来源,谢谢,这是否需要在路由中。或者我可以把它和主应用程序放在同一个文件夹中吗?非常感谢它需要位于站点根AFAIK中。@JB如果
crossdomain.xml
文件与要加载的资产位于远程服务器上,那么由于相同的安全限制,执行加载的SWF永远无法访问它。图像是Flash Player中的一种特殊情况:可以显示不同域的图像(即使没有crossdomain.xml),但不能访问其中的位图数据。(这在中提到)您在
crossdomain.xml
文件中有什么?允许所有域。跨域策略>