以下是js代码
/***[Jsonp简单的封装jsonp]*@authorShaoWeiPu*@CreateTime2016-12-01T11:18:45+0800*@param{[type]}method[description]*@param{[type]}url[description]*@param{[type]}data[description]*@param{[type]}userOpts[description]*/Jsonp:function(method,url,data,userOpts){data.csrf_token=$('meta[name="csrf-token"]').attr('content');options=$.extend({type:'get',url:url,data:data,dataType:"JSONP",xhrFields:{withCredentials:true},async:false,timeout:3000,cache:false,jsonp:"Callback",jsonpCallback:"jsonCallback",contentType:"application/json",/*success:function(data,textStatus){console.log(data);},error:function(e){}*/},userOpts);return$.ajax(options);},
然后是php
服务端的
//ConstConf::getOriginToC();//跨域处理包//header('Access-Control-Allow-Origin:*');if(isset($_GET['Callback'])){$res=['code'=>'1'];header("Content-Type:application/json");echo$_GET['Callback']."(".json_encode($res).")";}die;
发现我注释掉header('Access-Control-Allow-Origin:*');
JSONP
的请求依然能够过来,另外问问诸位都是怎么解决跨域问题的呀?
我发现我直接使用ajax
中的json
的话发现Session
会不一样,所以使用了jsonp
的形式完成跨越,但是看到jsonp
貌似是所有的知道此链接的都可以进行访问呀,那么我该如何进行控制呢?
感谢诸位大神指导O(∩_∩)O~
jsonp本质是利用<script>标签
的src
跨域能力做到的,与ajax
是两种不同的方式。
JSONP原理:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
你知道原理之后你就会知道,要返回JSONP数据的话,一定需要一个callback(json)这样的形式,才能被正确调用。既然你服务器写了这样的形式,那么所有知道链接的都可以jsonp这个接口。
解决方案:
不用jsonp,用header做白名单。header('Access-Control-Allow-Origin:你的白名单域名');
JSONP不需要设置header('Access-Control-Allow-Origin:*');
JSONP解决GET跨域
设置Access-Control-Allow-Origin响应头
Apache反向代理
可是我用的是nginx,我将例子在弄下
使用jsonp就直接跨域了,并不需要再写跨域头