跨域请求就是为了解决禁止跨域访问的问题。
用jsonp的原因是json是javascript中的对象,而跨域访问中有图片、css、javascript脚本文件等是不限制,因此你可以在页面渲染时动态在<script>标签设置src路径,而这个路径返回回来的就是json对象。
在构建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
XMLHttpRequest2 进行跨域访问时需要服务器许可,不是任何域都接受跨域请求的。先来看一下从 Yahoo YQL 域返回的响应头(Response Header ):
HTTP/1.1 200 OKSet-Cookie: AO="o=1&s=1&dnt=1" Version=1 Domain=yahoo.com Max-Age=630720000 Expires=Sat, 18-Jun-2033 10:07:41 GMT Path=/
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=899
Content-Type: text/xmlcharset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Sun, 23 Jun 2013 10:07:40 GMT
注意里面有一条标识 Access-Control-Allow-Origin:* ,这就表示允许跨域访问,所以可以正常访问该域,而对于其他没有该标识的域就会出现禁止访问提示。
那么如何设置呢?如果要接受跨域访问请求,就必须在服务器端返回的资源中加入 Access-Control-Allow-Origin 头标识, Access-Control-Allow-Origin 的值可以是 URL 或 *,如果是 URL 则只会允许来自该 URL 的请求,* 则允许任何域的请求。比如,在 HTML 中可以设置:
<meta http-equiv="Access-Control-Allow-Origin" content="*">或
<meta http-equiv="Access-Control-Allow-Origin" content="http://www.baidu.com:80">