当.swf和http目标都在localhost上时,为什么Flash要求使用crossdomain.xml文件?

时间:2011-06-03 02:51:25

标签: flash flex actionscript-3 crossdomain.xml

我有一个小型客户端/服务器测试应用程序,我有一个Flex应用程序,它发出服务器应用程序的HTTP请求。服务器应用程序是在我的本地计算机上运行的脚本,侦听端口8001.客户端是我在本地运行的swf,并使用mx.rpc.http.HTTPService发出页面请求。

HTTPService的设置如下:

_HttpService = new HTTPService();
_HttpService.url = "http://localhost:8001";
_HttpService.contentType = "text/xml";

当我发出基本页面请求时,我的服务器应用程序首先收到"GET /crossdomain.xml HTTP/1.1"请求,该请求失败,因为我没有安装crossdomain.xml文件。我没有到位的原因是因为这一切都发生在我的本地机器上(现在),我不需要一个(我不认为)。

当我使用Flex 3.x时,我确实在没有crossdomain.xml的情况下使用此代码。我以为我也使用过Flex 4。现在我正在使用Flex 4.5。这里是否存在问题,可能是由于安全策略的变化?

所有这一切都发生在localhost上,为什么Flash播放器会请求一个crossdomain.xml文件?

如果它有帮助,我的AsyncResponder回来的具体错误是:

[FaultEvent fault=[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"] messageId="F43DCBFF-E99A-99CC-57D8-535C13C7CD48" type="fault" bubbles=false cancelable=true eventPhase=2]

2 个答案:

答案 0 :(得分:11)

虽然客户端页面和服务器之间有相同的主机和协议,但是不同的端口会导致Flash无法通过同源测试,并请求crossdomain.xml查看允许执行的操作。我假设托管你的Flash内容的页面正在端口80上运行?如果是这种情况,请查看Wikipedia关于相同原始政策的文章(http://en.wikipedia.org/wiki/Same_origin_policy)以获取详细信息。

对于本地测试来说,crossdomain.xml似乎并不太麻烦,而且在help.adobe.com上有很好的文档记录。您可以在此网站的根目录中创建一个crossdomain.xml,这将允许所有访问:

<?xml version="1.0"?> 
<!-- http://localhost/site/crossdomain.xml --> 
<cross-domain-policy> 
    <site-control permitted-cross-domain-policies="all"/> 
    <allow-access-from domain="*" to-ports="*"/> 
</cross-domain-policy>

我不会将上述内容用于本地开发以外的任何内容,因为您基本上允许任何域请求内容。

希望这有帮助!

答案 1 :(得分:2)

使用policyfile.txt我发现策略文件被拒绝,因为服务器没有指定Content-Type。这就解释了为什么不可能找到任何关于它的博客。

希望这有助于某人。

在Flex 4.5 Mac中 / Users / [YOUR_USER_NAME] / Library / Preferences / Macromedia / Flash Player / Logs&gt; tail -f policyfiles.txt