发布于2026-07-04 阅读(0)
扫一扫,手机访问
在ThinkPHP中处理跨域请求,本质上就是给响应加上必要的HTTP头,让浏览器放行。这事儿说起来简单,但不同场景下还是有些细节要留意。下面分享两种最常见的实现方式,以及几个容易踩坑的地方。

最直接的方法,就是在控制器的动作方法里手动添加响应头。比如下面这样:
public function index(){
// 允许任何域名跨域,生产环境建议限制具体域名
header('Access-Control-Allow-Origin: *');
// 允许的HTTP方法
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
// 允许的自定义请求头
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
// ... 你的业务逻辑 ...
return $this->fetch();
}这种方法简单粗暴,但如果项目里很多接口都需要跨域支持,每个控制器方法都写一遍就太冗余了。这时就该中间件登场了。
创建一个专用的跨域中间件,这样所有请求都会自动带上跨域头,不需要在控制器里重复劳动。中间件代码如下:
namespace appmiddleware;
use thinkResponse;
class Cors
{
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('Access-Control-Allow-Origin', '*');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
$response->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
return $response;
}
}然后在 application/middleware.php 中注册这个中间件:
return [
// ... 其他中间件
appmiddlewareCors::class,
// ...
];注册之后,所有经过应用的请求都会自动加上跨域头,省心省力。
Access-Control-Allow-Origin: * 表示允许任意域名发起跨域请求,开发测试时很方便。但生产环境建议只开放你信任的域名,比如把 * 换成 http://example.com。否则等于给所有外部网站开了后门。Access-Control-Allow-Origin 还不够,还得加上 Access-Control-Allow-Credentials: true。而且此时 Access-Control-Allow-Origin 不能使用通配符 *,必须指定具体的域名——这是浏览器的安全限制。以上就是在ThinkPHP中搞定跨域请求的常规做法。实际项目中根据安全策略和业务需要,可能还要对部分域名做白名单、对敏感接口做额外校验,但核心思路不变。拿准这几个要点,跨域问题基本不会卡住太久。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8