ajax跨域实现api 接口调用

背景: 想实现跨域去调用接口, 然后同时支持下次调用,能够带cookie信息过来,同时支持来自多个源头的域名的跨域调用。

 

1.这样支持来自所有域名的跨域调用:

不支持跨域是,浏览器报错:

 

在api接口服务端加上相应的协议头:

 header("Access-Control-Allow-Origin: *',);
 header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');

  但是,这样的api接口,不支持cookie.

 

2.如果想支持cookie, 需要加上

header('Access-Control-Allow-Credentials: true');

  但是这样的话,前面服务端设置的这个头,浏览器就会报错。说是access-control-allow-origin头不能  用   * 这个通配符。

header("Access-Control-Allow-Origin: *',);

浏览器报错如下图: 

 

 

  

必须改成具体的某个域名。  但是,我们的api又希望支持来自许多不同域名的跨域访问,怎么办呢,这时候,在服务端做个动态的判断处理就ok了。

<?php
$ret = array(
    'name' => isset($_POST['name'])? $_POST['name'] : '',
    'gender' => isset($_POST['gender'])? $_POST['gender'] : ''
);

header('content-type:application:json;charset=utf8');

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';

$allow_origin = array(
    'http://www.client.com',
    'http://www.client2.com'
);

if(in_array($origin, $allow_origin)){
    header('Access-Control-Allow-Origin:'.$origin);
    header('Access-Control-Allow-Methods:POST');
    header('Access-Control-Allow-Headers:x-requested-with,content-type');
}

echo json_encode($ret);
?>

  参考:http://my.oschina.net/blogshi/blog/303758

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值