跨域 ajax 请求之 jsonp 原理解析
# jsonp 本质上是个 get 请求
也就是说在用 jquery 发送这个 jsonp 请求的时候,只要你指定了 dataType:'jsonp',那么你指定 type:'post'也是没用的,这个时候,这个请求肯定是 get 的,无视任何 post 设定。这个是新手非常容易忽略的一点。
# jsonp 本质上还是在页面中插入了个 js
jsonp 本质上是在当前页面上插入了个 js,然后执行了里面的函数,也就是说,即使你返回的数据里面并非我们仿造的 json 格式。是普通的 js 的话,也是会执行的。也就说,请求外站(不可信任站)的 jsonp,是个非常傻的行为。能用 json,就不用 jsonp,这个是出于安全角度提出的要求,新手们也一定要注意。
当然了,这点也可以拿来利用,修理那些非法盗数据的网站。怎么个修理法,你们自己想,提示就一点:jsonp 的内容会被当做个正常的 js 在对方页面上完全执行,无保留的执行(以后有空可以给大家写个案例)。甚至去做 xss,构造特殊函数,拿 cookie。
# 前端角度看 json 和 jsonp 差别
对于前端 来说,区别就一个字母。p,下面是相关代码 jquery 范例:
$.ajax({
type : "get",
async: false,
url : "youraction.php",
dataType : "json",
success : function(json){
},
error:function(){
}
});
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
上次更新: 2023/08/06, 22:51:57
