ThinkPHP如何实现跨域请求
在ThinkPHP中处理跨域请求,可通过控制器设置响应头或创建中间件全局实现。生产环境需限制具体域名,携带cookie时需指定域名并设置Credentials:true,预检请求需返回200状态码。
在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。否则等于给所有外部网站开了后门。 - 带cookie的跨域:如果接口需要支持携带cookie(比如用户登录态),那么光设置
Access-Control-Allow-Origin还不够,还得加上Access-Control-Allow-Credentials: true。而且此时Access-Control-Allow-Origin不能使用通配符*,必须指定具体的域名——这是浏览器的安全限制。 - 预检请求的处理:当跨域请求使用了非简单方法(比如PUT、DELETE),或者带了自定义头,浏览器会先发一个 OPTIONS 预检请求。服务器只要正常返回200即可,无需额外处理。但如果你的路由没有匹配到 OPTIONS 请求,可能会导致预检失败。解决方法是单独为 OPTIONS 请求返回200,或者直接用中间件统一处理。
以上就是在ThinkPHP中搞定跨域请求的常规做法。实际项目中根据安全策略和业务需要,可能还要对部分域名做白名单、对敏感接口做额外校验,但核心思路不变。拿准这几个要点,跨域问题基本不会卡住太久。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。





