javascript开发中jsonp跨域请求是什么意思?什么叫跨域?为什么用jsonp?

JavaScript05

javascript开发中jsonp跨域请求是什么意思?什么叫跨域?为什么用jsonp?,第1张

跨域是JavaScript出于安全方面的考虑,不允许浏览器在当前访问的域名的页面中的javascript的调用其他域名页面中的对象。

跨域请求就是为了解决禁止跨域访问的问题。

用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 OK

Set-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">