当前位置: 首页 > 工具软件 > thinkphp5mall > 使用案例 >

thinkphp 跨域问题,解决官方需要写很多路由的问题

司寇昱
2023-12-01

thinkphp 官方文档中跨域问题,需要每个路由单独配置,但是更多的时候需要全局跨域,一个项目几百个接口,都写一遍,真的要死人了

自行添加请求头即可解决,不过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);

 类似资料: