xmpp js端跨域请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xmpp js端跨域请求相关的知识,希望对你有一定的参考价值。

参考技术A 在构建xmpp web客户端的时候, 如果网站和xmpp服务器的域名不一致,就需要用到跨域请求了。

可以使用 flXHR.js 这个库来实现跨域请求,因为使用了 strophe,所以需要加载以下两个js。之后会在 strophe 中会使用 flxhr 来发起请求。

使用 flxhr 请求, 需要服务器在根目录返回 domaincross.xml 文件, 具体格式点这 ---> 文档链接

ejabberd 的 mod_http_fileserver 组件是专门用来配置文件服务器的组件

在加入 mod_http_fileserver 后, web_admin(web admin管理)功能失效了, google 后发现为 ejabberd 的 bug.

想到的解决的办法,是另外一个端口启动 web_admin。

1.编辑 ejabberd 配置文件, 将 5280, ejabberd_http, 开头的这段配置替换成

2.将 mod_http_fileserver, 开头的一段替换为以下,

记得把路径替换成你的。

3.在 /Applications/ejabberd-14.05/www 路径下加入 domaincross.xml

cors跨域资源共享---解决前后端跨域问题

      Cross-Origin Resource Sharing (CORS) ,定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。

解决方法:

①后端加响应头

header("Access-Control-Allow-Origin: *");
header(‘Access-Control-Allow-Credentials: true‘);
header(‘Access-Control-Max-Age: 86400‘);    // cache for 1 day
// header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");     
// Access-Control headers are received during OPTIONS requests
if ($_SERVER[‘REQUEST_METHOD‘] == ‘OPTIONS‘) {
    if (isset($_SERVER[‘HTTP_ACCESS_CONTROL_REQUEST_METHOD‘]))
        header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");        
    if (isset($_SERVER[‘HTTP_ACCESS_CONTROL_REQUEST_HEADERS‘]))
        header("Access-Control-Allow-Headers: {$_SERVER[‘HTTP_ACCESS_CONTROL_REQUEST_HEADERS‘]}");
}  

②设置前端ajax请求参数

 

以上是关于xmpp js端跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

用Nginx代理请求,处理前后端跨域

PHP后端跨域HEADER头

一句话概括options预检请求+后端跨域代码解释——打破前后端联调的理解障碍

使用Httpclient 完美解决服务端跨域问题

前后端跨域常用解决方案

前后端跨域常用解决方案