【问题标题】:Why XMPP client using strophe.js still working with out including flXHR.js?为什么使用 strophe.js 的 XMPP 客户端仍然可以在不包含 flXHR.js 的情况下工作?
【发布时间】:2014-10-10 00:59:54
【问题描述】:

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

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

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

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

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

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

谁能解释一下这背后的原因是什么?

提前致谢!!

【问题讨论】:

  • @fpsColton 谢谢提醒!!

标签: javascript flash xmpp strophe


【解决方案1】:

您的 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 文件。

【讨论】:

  • 感谢@fpsColton 的回答,我使用的是ejabberd 2.1.11,可能是XMPP 服务器启用了CORS,我不确定,但根据本书的java 脚本限制可以在保存它的同一源上运行,因此需要 FLxhr.js 来实现可以进行跨域调用的 flash,我怀疑现代浏览器是否有能力进行跨域调用??
  • 如果其他域正确支持 CORS,现代浏览器确实能够进行跨域调用。这是 Jack Moffit 关于该主题的博客文章,他承认没有听说过规范,这就是他的书中可能没有提到它的原因。 metajack.im/2010/01/19/…
  • 感谢上面评论中的链接,Jake moffitt 简要介绍了现代浏览器中的交叉支持,还讨论了 ejabbed 和 punjab bosh 经理的补丁,好帖子!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2017-03-08
  • 1970-01-01
  • 2021-07-12
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多