什么是跨域
域名的组成
http:// | www | . | test.com | : | 80 | / | index.html |
协议 | 子域名 | 主域名 | 端口号 | 请求资源地址 |
说明:当协议、子域名、主域名、和端口号有任意一个不同时,就算是不同域
跨域:不同域之间相互请求资源,就是跨域
跨域的解决方案
Jsonp :需要目标服务器配合一个callback函数
JSONP只支持GET请求
CORS解决跨域 :跨域访问的请求头中存在Origin的字段,用来记录当前的访问域名,我们可以再服务端增加一个响应头Access-Control-Allow-Origin来告诉浏览器我们支持它获取就可以了
//一个域名跨域访问
<?php header('Access-Control-Allow-Origin:http://127.0.0.1'); $arr = ['code' => 200, 'name' => 'cui']; echo $data = json_encode($arr); ?>
//多个域名跨域访问
<?php
$requestHeader = getallheaders();
$origin = isset($requestHeader['Origin'])?$requestHeader['Origin']:'';
switch ($origin) {
case 'http://127.0.0.1':
header('Access-Control-Allow-Origin:http://127.0.0.1');
break;
case 'http://localhost':
header('Access-Control-Allow-Origin:http://localhost');
break;
default:
break;
}
$arr = ['code' => 200, 'name' => 'cui'];
echo $data = json_encode($arr);
//注意,不支持下面这种写法
//header('Access-Control-Allow-Origin:http://localhost,http://127.0.0.1');
?>
//不推荐这样写,不安全
header('Access-Control-Allow-Origin:*');
$arr = ['code' => 200, 'name' => 'cui'];
echo $data = json_encode($arr);