/** * 跨域请求设置 */ function checkAllowOrigin() { //从配置文件获取允许源域名 $allowOrigin = explode(',', env('app.allow_origin')); if (in_array('*', $allowOrigin)) { $origin = '*'; $allow = true; } else { $origin = request()->header('Origin') ?? request()->domain(); $allow = in_array($origin, $allowOrigin); } if (!$allow) { exit('403'); } //允许跨域的来源域名 header('Access-Control-Allow-Origin:'.$origin); header('Access-Control-Allow-Methods: GET, POST, OPTIONS');//允许跨域的请求方法 // 带 cookie 的跨域访问 header('Access-Control-Allow-Credentials: true'); // 响应头设置(允许跨域的头部) header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token,Access-Token'); }
四点:
1.允许跨域的来源域名
2.允许跨域的请求方法
3.允许带 cookie 的跨域访问(不允许改为false)
4.允许跨域的头部(记得把自定义的header头也写进去,不然跨域会不成功)
特别要注意的是3和4点。比如第4点的Access-Token,我们项目自定义的,忘了加。在有用户登陆的时候,就一直无法跨域。