如何在特定端口上提供 crossdomain.xml 文件?

How can I serve crossdomain.xml file on a specific port?

让我逐步介绍我的问题:

我在地址 www.mydomain.com:1925 上使用套接字连接为我的用户提供聊天服务。当我转移到 cloudflare 时,我无法直接连接到端口 1925,因为我的请求通过 cloudflare 到达我的源服务器并且端口正在更改。

我是怎么解决的? 我创建了一个子域 chat.mydomain.com,其 DNS 设置指向我的原始服务器而不是 cloudflare。我通过这种方式绕过了 cloudflare,并在浏览器上使用 chat.mydomain.com:1925 连接了我的聊天服务。到目前为止一切顺利。

问题来了。 我也在使用 Flash 和 AS3。它是我在网站上的游戏的核心。聊天正在 html 上进行,我的 Flash 游戏在我网站的某些部分。在 flash 中,我通过不同的名称空间再次使用 www.mydomain.com:1925 上的套接字连接发送数十名玩家。(由于 swf 的主机和 url 的主机匹配,我没有任何问题我想想)。由于我已将域更改为 chat.mydomain.com:1925,Flash 开始在 chat.mydomain.com:1925 上请求 crossdomain.xml。 chat.mydomain.com 上有一个 crossdomain.xml 文件,但我无法从 chat.mydomain.com:1925 提供它。这是我的代码:

Security.loadPolicyFile("https://chat.mydomain.com/crossdomain.xml");
var urlLoader:URLLoader = new URLLoader ();
var url:String = "https://chat.mydomain.com:1925/socket.io/1/";                                 

var request:URLRequest = new URLRequest(url);
request.method = URLRequestMethod.POST;     

urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
urlLoader.load(request);

由于flash无法通过获取404找到crossdomain.xml,所以我的代码中的请求不起作用。我该如何解决这个问题?

我已经解决了问题。 URLRequest 正在尝试连接 https://chat.example.com:1925/socket.io/1/. Since the swf was on the domain https://www.example.com, the swf was asking for https://chat.example.com:1925/crossdomain.xml。该端口不理解 https,因为它用于我的 websocket。所以我找不到任何方法在 swf 中调用这个请求。然后,我想到了一个想法,我可以在 swf 之外调用这个 url。因为我只需要 handshakeid,所以我通过 javascript 调用了这个函数。得到响应后,我通过将 handshakeid 作为参数来加载我的 swf。那已经解决了我的问题。对于那些需要动态调用这样的函数的人,他们可以使用 ExternalInterface 调用。希望对你有帮助。