我有一个小型客户端/服务器测试应用程序,我有一个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]
答案 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