跨域配置了还是失败

跨域问题一直围绕着广大开发同志们,相信很多童鞋和我一样有点云里雾里。

跨域的解决方式:

我们知道请求分简单请求和非简单请求(关于简单请求和非简单请求请查看https://www.cnblogs.com/web-alibaba/p/7583323.html,或自行搜索,首先得了解这两者)

针对php写法,其他语言类似
 header('Access-Control-Allow-Origin:*');//或者根据实际情况配置域名
  

对于复杂请求:

   

$origin = ['http://localhost:8080','http://localhost:8081'];
$AllowOrigin = 'http://localhost:8080';
if(in_array($_SERVER["HTTP_ORIGIN"],$origin))
{
    $AllowOrigin = $_SERVER["HTTP_ORIGIN"];
}
header("Access-Control-Allow-Origin: ".$AllowOrigin );
---------------------------------------------------------------------------------
//设置允许的请求方法,可以用*表示所有,
header("Access-Control-Allow-Methods: POST");
---------------------------------------------------------------------------------
//如果允许请求携带cookie,此时 origin配置不能用 *,此时前端似乎也要做配置,让请求中携带cookie
header('Access-Control-Allow-Credentials:true');
---------------------------------------------------------------------------------
//设置允许跨域的请求头,通常会在请求头里面加登录验证
header('Access-Control-Allow-Headers:token');

  其实上面一段代码只是例子,复杂的时候要设的更多,本篇主要的问题点不在这里,一般情况 下设置了这段代码跨域、前端相关跨域配置也设置了,就OK 了。但还是会预检测失败 preflight is not successful

 此时 加在这段后面 加上

//预检options请求你返回
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    return true; 

}

就是 说当请求是预检时候,检测完上面配置后直接返回或者断开就好了,因为有时候失败是因为往下执行代码了导致出错

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值