当前位置: 首页 > 面试题库 >

如何使用Flash,Socket.IO和NodeJS修复(可能)跨域策略错误

韦望
2023-03-14
问题内容
Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://kipos.bluecodestudio.com/holdthebomb/HoldTheBombWeb.swf cannot load data from http://23.29.126.76:8000/socket.io/1/?t=1356891827452.
    at io::Socket/doHandshake()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:139]
    at io::Socket/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:110]
    at io::Socket()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/Socket.as:90]
    at io::IO$/connect()[/Users/airrider3/github/AS3-Socket.IO-XHR-Polling/xhr-polling/src/io/IO.as:36]
    at MainController/endOfbluecodeSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/MainController.as:41]
    at bluecodeSplash/endOfSplash()[/Users/airrider3/Dropbox/Projects/Kipos/Minigames/HoldTheBombWeb/src/bluecodeSplash.as:55]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at com.greensock.core::TweenCore/complete()[D:\_Flash\_AS3\src\com\greensock\core\TweenCore.as:178]
    at com.greensock::TweenLite/renderTime()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:477]
    at com.greensock.core::SimpleTimeline/renderTime()[D:\_Flash\_AS3\src\com\greensock\core\SimpleTimeline.as:93]
    at com.greensock::TweenLite$/updateAll()[D:\_Flash\_AS3\src\com\greensock\TweenLite.as:642]

我正在使用Flash Builder(一个ActionScript项目),该项目使用Socket.IO模块连接到运行NodeJS的服务器。

要将Socket.IO与AS3连接,我正在使用以下库https://github.com/sbquinlan/AS3-Socket.IO-XHR-
Polling
,该库在Flash
Builder中进行本地测试时效果很好。

但是,如果托管在我的域[http://kipos.bluecodestudio.com/holdthebomb/]上,我想它会引发此SecurityErrorEvent,因为我没有正确使用任何crossdomain.xml文件?老实说,我从未与这个话题相处,所以我不确定这是否是错误。

无论如何,我都有以下crossdomain.xml文件:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <site-control permitted-cross-domain-policies="master-only"/>
   <allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>

我在服务器上的不同位置都有它。(应该在托管客户端上吗?)。是的,该游戏托管在bluecodestudio.com上,而该游戏的服务器位于IP
23.29.126.76上,并在端口8000上运行。

如果是跨域策略错误的情况,那么有人可以解释应该采取什么措施来解决该问题吗?

感谢您的关注。

更新1:

我设置了一个侦听提供跨域文件的端口843的服务器,但是我可以看到Flash如何不尝试加载它。(我测试了该命令,python -c 'print "<policy-file-request/>%c" % 0' | nc 23.29.126.76 843并检查了策略服务器的实际工作方式。

SWF为什么不尝试加载跨域策略文件?


问题答案:

哇 我只是在Socket.IO文档上阅读了此内容:“闪存策略端口默认为10843

默认情况下,Socket.IO客户端将检查服务器上的端口10843,以查看是否允许flashsocket连接。Adobe Flash
Player通常使用843作为默认端口,但我们决定默认为非根端口。”

这就是为什么它没有尝试从端口843加载文件的原因…

来源: https
//github.com/LearnBoost/Socket.IO/wiki/Configuring-
Socket.IO


 类似资料:
  • 综述 富因特网应用程序(Rich Internet Applications, RIA)应该遵循Adobe的 crossdomian.xml 策略来控制跨域访问数据和使用服务,例如Oracle Java,Siverlight和Adobe Flash。因此,一个域名授予另一个不同域名远程访问自己的服务的能力。但是,这些策略文件中描述的访问控制被糟糕配置。糟糕的策略配置会导致跨站点伪造请求攻击(CSR

  • 不幸的是,一个第三方服务IFRAME我仍然需要在我的页面是不加载了。有一种方法允许第三方域,即使嵌入策略打开? 谢了。达里奥。

  • 问题内容: 我最近一直在四处寻找,以找到一种在nodeJS和PHP之间进行通信的好方法。这里是一个想法:nodeJS还是一个很新的东西,仅使用它开发一个完整的应用程序可能有点棘手。而且,您可能只需要项目的一个模块(例如实时通知,聊天等),就可以使用PHP来管理所有其他内容,因为它可能对您来说更容易(而且您可以利用现有框架,例如CodeIgniter或Symfony)。 我想有一个简单的解决方案;

  • 我最近一直在寻找一种在nodeJS和PHP之间进行通信的好方法。这里有一个想法:nodeJS仍然是相当新的,仅仅用它开发一个完整的应用程序可能有点棘手。此外,您可能只需要用于项目的一个模块,如实时通知、聊天等,而您希望用PHP管理所有其他内容,因为它对您来说可能更容易(而且您可以利用现有的框架,如CodeIgniter或Symfony)。

  • 假设我拥有2个域www.xyz.comajax.xyz.com.我想从前缀为www的站点加载我的超文本标记语言和javascript,然后向前缀为ajax的站点执行ajax请求。同源策略会阻止我的ajax请求从www.xyz.comajax.xyz.com还是在不使用访问控制允许源标头的情况下工作。 问候

  • 然后,可以通过domain.com/socket/访问socket.io(获得消息Welcome to socket.io)。另外,静态内容也被交付,但是我无法找到通过端口80加载“socket.io/socket.io.js”文件的任何方法。 在干净的方式上这可能吗?