10

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

2 回答 2

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>

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

希望这可以帮助!

于 2011-06-03T03:11:35.303 回答
2

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

希望这可以帮助某人。

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

于 2011-07-22T22:04:11.787 回答