自行添加请求头即可解决,不过thinkphp进行了处理,对于一些特殊的请求头都会重新设置一遍(应该是之前设置过就不设置了呀,绝对是个bug),导致我们自己设置的请求头不起作用,头疼啊
我的解决方法:(另外用后置中间件添加请求头也是可以实现的)
在入口文件 index.php中,(当然有的人入口文件不是index.php,自己找到就好),加入以下代码
header("Access-Control-Allow-Origin:" . request()->server('HTTP_ORIGIN'));//这样配置是任何来源的请求都允许跨域,如果设置成*也是允许任何来源域名跨域,当然大多数情况是只允许一个域名跨域,比如 http://a.com,就需要写成header("Access-Control-Allow-Origin:http://a.com";
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
header('Access-Control-Allow-Credentials:true');//这里是允许携带cookie的,如果开启,Access-Control-Allow-Origin这个请求头不能是*,只能是指定的某一个域名
添加好了之后如下所示:
<?php
// [ 应用入口文件 ]
namespace think;
use app\index\controller\Api;
require __DIR__ . '/../vendor/autoload.php';
// 执行HTTP应用并响应
$http = (new App())->http;
$response = $http->run();
Api::check_e();
$response->send();
header("Access-Control-Allow-Origin:" . request()->server('HTTP_ORIGIN'));
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
header('Access-Control-Allow-Credentials:true');
$http->end($response);