Flash - HTTP请求不适用于localhost

时间:2010-06-11 21:54:57

标签: flash localhost httprequest cross-domain-policy

首先,我正在尝试修复一些我没有开始构建的东西,并且那个项目的人确保我离开时工作正常,尽管我离开后我没有触及过这个版本似乎有同样的问题。我对编程也有点新意,所以如果我在第一篇文章中遗漏了重要信息,请告诉我,我会尝试添加更多信息。

我有一个在线托管的Flash应用程序,它充当用Delphi编写的服务器应用程序的客户端。大多数通信是使用套接字完成的,套接字工作正常。上传数据文件和下载结果文件是使用HTTP请求完成的,只要用户在另一台计算机上使用服务器实例,就可以正常工作。但是,如果用户在自己的计算机上安装了服务器应用程序并尝试使用它将localhost指定为url,则套接字通信仍然有效,但HTTP请求不会。

所有基于套接字的通信都可以正常工作,当它不在localhost上时,所有的HTTP请求都可以正常工作,这就是为什么这对我来说太神秘了。我已经尝试将服务器调度的flash跨域策略文件更改为完全允许,所有端口,所有域,所有http-request-headers,但仍然没有运气。

Flash应用程序将在大多数情况下无限期地等待localhost,直到我关闭服务器应用程序,然后给出此错误消息:

Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://abcde.com/Testing.swf cannot load data from http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378.

我已经尝试在多台计算机上托管它,每台计算机都可以在另一台机器上访问该实例,但在尝试使用自己的实例时无法正常工作。

另外,如果我只是将http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378放入网络浏览器,我试图弹出的结果文件就可以了。

以下是尝试下载文件的Flash应用程序中的代码块:

private function downloadFile():void
{
    trace("downloadFile: " + this.guid + " from " + this.server.URL);
    fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    fileRef.addEventListener(ProgressEvent.PROGRESS, downloadProgressHandler);
    var ur:URLRequest = new URLRequest("http://" + _server.URL + ":" + _server.port);
    ur.url += "/guid=" + _guid;
    ur.method = URLRequestMethod.GET;
    fileRef.download(ur, _filename);
    _downloadStart = true;
}

如果有人有任何见解,我将不胜感激,因为我完全没有想法。

1 个答案:

答案 0 :(得分:0)

这是Flash播放器安全模型的限制。要解决此问题,您可以将闪存打包为AIR应用程序,并解除许多安全限制。

如果您在网络服务器上托管您的Flash文件而不是在本地访问.swf,您也可能获得更好的成功。

您无法做的另一件事是从Flash播放器访问本地文件,这是您可以使用AIR运行时无法在Flash播放器中执行的操作的另一个示例。