为什么使用strophe.js的XMPP客户端仍然可以工作,包括flXHR.js

Why XMPP client using strophe.js still working with out including flXHR.js?

本文关键字:js 工作 flXHR 包括 客户端 strophe 为什么 XMPP      更新时间:2023-09-26

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

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

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

FLxhr.js用于进行跨域调用,如书中所述"Flash有严格的安全策略,但与JavaScript不同,它允许跨域调用将请求发送到允许此类请求的域。"

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

我使用apache tomcat作为web应用程序服务器,我没有设置任何代理,不包括FLxhr.js文件在我的html页面,但仍然xmpp客户端能够与服务器通信!!

谁能给我解释一下这背后的原因?

提前感谢!!

很可能您的XMPP服务器启用了CORS,我知道Openfire现在支持这个。有了CORS, stropheh .js可以在不需要flash(FLxhr.js)提供的解决方案的情况下发出跨域请求,也可以在没有任何服务器端重定向的情况下工作。

跨域资源共享

跨域AJAX实现XMPP http绑定

CORS浏览器支持

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

的例子:

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

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