内容简介:浏览器出于安全方面的考虑,只允许与同源下的接口交互。所谓"同源"指的是"三个相同"。目前,如果非同源,共有三种行为受到限制。
浏览器出于安全方面的考虑,只允许与同源下的接口交互。
所谓"同源"指的是"三个相同"。
-
协议相同:如都是
http或者https - 域名相同:www.example.com/dir 和 www.example.com/dir2/
- 端口相同:如都是80端口
目前,如果非同源,共有三种行为受到限制。
- Cookie、LocalStorage 和 IndexDB 无法读取。
- DOM 无法获得。
- AJAX 请求不能发送。
比如: 用户打开了 页面:baidu.com/yyy, 当前页面下的 js 向baidu.com/xxx的接口发 ajax 请求,浏览器是允许的。但假如向: google.com/xxx 发ajax请求则会被浏览器阻止掉,因为存在跨域调用。
2. JSONP(JSON with padding)
(1)产生的原因:
- Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;
-
不过聪明的开发人员们发现,Web页面上调用 JS 文件时则不受是否跨域的影响(不仅如此,还发现凡是拥有 "
src" 这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>); - 于是,当前阶段如果想通过纯web端跨域访问数据,就是在远程服务器上设法把数据装进 JS 格式的文件里,供客户端调用和进一步处理;
- 恰巧有一种叫做 JSON 的纯字符数据格式可以简洁的描述复杂数据,更妙的是 JSON 还被 JS 原生支持
- 所以,web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的JS格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。
-
为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作 JSONP
,该协议的一个要点就是允许用户传递一个
callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
(2)基本原理
JSONP是服务器与客户端跨源通信的常用方法。
它的基本思想是:
网页通过添加一个 <script>
元素,向服务器请求JSON数据,并且该请求的查询字符串有一个 callback
参数,用来指定回调函数的名字,这种做法不受同源政策限制;
服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
举个栗子:
请求方: frank.com 的前端程序员(浏览器)
响应方: jack.com 的后端程序员(服务器)
-
请求方创建
<script>,src指向响应方,同时传一个查询参数?callbackName=yyy
<script src="http://api.jirengu.com/weather.php?callbackName=showData"></script> 复制代码
-
响应方根据查询参数
callbackName,构造形如ⅰ.
yyy.call(undefined, '你要的数据')ⅱ.
yyy('你要的数据')这样的响应
之前后端返回数据: {"city": "hangzhou", "weather": "晴天"}
现在后端返回数据: showData({"city": "hangzhou", "weather": "晴天"})
复制代码
-
浏览器接收到响应,就会执行
yyy.call(undefined, '你要的数据')那么请求方就知道了他要的数据
这就是 JSONP。
(3)jQuery 用法
用jQuery实现JSONP调用:
$.ajax({
url: "http://jack.com:8002/pay",
dataType: "jsonp",
success: function( response ) {
if(response === 'success'){
amount.innerText = amount.innerText - 1
}
}
})
复制代码
以上所述就是小编给大家介绍的《简谈JSONP》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Trading and Exchanges
Larry Harris / Oxford University Press, USA / 2002-10-24 / USD 95.00
This book is about trading, the people who trade securities and contracts, the marketplaces where they trade, and the rules that govern it. Readers will learn about investors, brokers, dealers, arbit......一起来看看 《Trading and Exchanges》 这本书的介绍吧!