为什么当.swf和http目标都在本地主机上时,Flash要求crossdomain.
我有一个小的客户端/服务器测试应用程序,我有一个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.这里有问题,可能是由于安全政策的变化? 所有这些都在本地主机上发生,为什么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] 解决方法
可能的是,尽管客户端页面和服务器之间拥有相同的主机和协议,但是不同的端口会导致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> 我基本上允许任何域请求内容,我不会使用上述任何除本地开发之外的任何内容. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |