为什么使用strophe.js的XMPP客户端仍在使用包括flXHR.js?

时间:2014-08-16 13:59:11

标签: javascript flash xmpp strophe bosh

我使用ejabberd作为XMPP服务器,我们的项目之一需要有一个xmpp web客户端,因为我指的是jake moffitt的专业“XMPP编程与JavaScript和jQuery”我正在通过第3章hello world应用程序,这里为了使用strophe制作xmpp web客户端我必须包括创建java脚本文件,如strophe.js,flXHR.js和strophe.flxhr.js

我已经经历了很多次,但未能与服务器连接, 当我使用localhost检查波什连接时:5280 / http-bind它工作正常!!!!!

当我尝试通过删除flXHR.js与xmpp服务器连接时尝试和错误,它神奇地连接到xmpp服务器!!!!!

FLxhr.js用于按照书籍进行跨域调用“Flash具有严格的安全策略,但与JavaScript不同,它允许跨域 请求发送到允许此类请求的域。“

如果我绕过FLxhr.js,我必须使用代理

我使用apache tomcat作为web-app服务器,我没有设置任何代理,也没有在我的html页面中包含FLxhr.js文件,但xmpp客户端仍能与服务器通信!!

有人可以解释一下这背后的原因是什么?

提前感谢!!

1 个答案:

答案 0 :(得分:3)

您的XMPP服务器可能已启用CORS,我知道Openfire现在支持此功能。使用CORS,strophe.js能够在不需要flash(FLxhr.js)提供的解决方法的情况下发出跨源请求,并且无需任何服务器端重定向即可工作。

Cross-Origin Resource Sharing

Cross Domain AJAX for XMPP HTTP-Binding Made Easy

CORS Browser Support

如果要快速检查XMPP服务器是否启用了CORS,您应该能够找到托管在服务器根目录上的crossdomain.xml文件。

示例:

我使用地址http://192.168.0.26:7070/http-bind/将Strophe连接到我的XMPP服务器。

由于我启用了CORS,我可以浏览到http://192.168.0.26:7070/crossdomain.xml,服务器将返回一个XML文件。