跨域问题一直围绕着广大开发同志们,相信很多童鞋和我一样有点云里雾里。
跨域的解决方式:
我们知道请求分简单请求和非简单请求(关于简单请求和非简单请求请查看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;
}
就是 说当请求是预检时候,检测完上面配置后直接返回或者断开就好了,因为有时候失败是因为往下执行代码了导致出错