好好爱自己!

ajax跨域实现api 接口调用

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

 

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

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

 

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

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

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

 

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

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

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

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

浏览器报错如下图: 

 

 

  

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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

posted @   立志做一个好的程序员  阅读(8365)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示