商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ThinkPHP如何实现跨域请求

ThinkPHP如何实现跨域请求

  发布于2026-07-04 阅读(0)

扫一扫,手机访问

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

ThinkPHP如何实现跨域请求

方法一:在控制器中直接设置响应头

最直接的方法,就是在控制器的动作方法里手动添加响应头。比如下面这样:

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中搞定跨域请求的常规做法。实际项目中根据安全策略和业务需要,可能还要对部分域名做白名单、对敏感接口做额外校验,但核心思路不变。拿准这几个要点,跨域问题基本不会卡住太久。

本文转载于:https://www.yisu.com/ask/31853729.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注