ajax跨域

来源:互联网 发布:网址和域名的区别 编辑:程序博客网 时间:2024/06/18 12:48

ajax跨域访问

1、发送jsonp(json padding)类型数据 (支持cookie和session的传递)

主要利用了script调用可以跨域的漏洞

jsonp是通过创建一个script元素 强行指向到后台的api 参数在地址后携带

类似<script src="http://www.example.php/api?param1=1&param2=2"></script>

因此只支持get数据 传递的post类型会被转换为get

需要在ajax请求中添加 dataType: 'jsonp'

客户端接受请求:

需调用传递过来的callback参数作为函数名包装json返回json对象数据

$callBack = $_GET['callback'];

$json_arr['errCode'] = 0;
$json_arr['errMsg'] = 'OK';
echo $callBack.'('.json_encode($json_arr).')';
exit();



2、被请求页面添加(不支持cookie和session)

header('Access-Control-Allow-Origin:*'); // 允许所有来源

header('Access-Control-Allow-Method:POST,GET');// 允许所有来源访问

这种方法风险大

可用 header('Access-Control-Allow-Origin:http://zaopi.com'); 这种类型的方式

多个header('Access-Control-Allow-Origin:http://zaopi.com');  仅最后一个生效 即不支持多域名

如果要允许多个域名

目前只能用php语法判断

即判断发送请求来源的 $_SERVER['HTTP_ORIGIN']

原创粉丝点击