• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    ThinkPHP中跨域请求设置的几种方式

    发布者: 土豆服务器 | 发布时间: 2025-6-14 13:14| 查看数: 65| 评论数: 0|帖子模式

    在 ThinkPHP 中支持跨域请求,通常有以下几种方式:

    通过设置 HTTP 头信息


    • 在控制器方法中设置在需要支持跨域的控制器方法中,设置允许跨域的 HTTP 头信息。可以使用
      1. header()
      复制代码
      函数来设置,例如:
    1. public function yourMethod()
    2. {
    3.     // 设置允许所有来源的请求
    4.     header('Access-Control-Allow-Origin: *');
    5.     // 设置允许的请求方法
    6.     header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
    7.     // 设置允许的请求头
    8.     header('Access-Control-Allow-Headers: Content-Type, Authorization');

    9.     // 其他业务逻辑代码
    10.     return json(['message' => '跨域请求成功']);
    11. }
    复制代码

    • 使用中间件设置创建一个中间件来统一设置跨域头信息。例如,使用 ThinkPHP 的命令行工具生成中间件:
    收起
    bash
    1. php think make:middleware CorsMiddleware
    复制代码
    然后在生成的
    1. CorsMiddleware
    复制代码
    类中,在
    1. handle
    复制代码
    方法中设置跨域头:
    1. <?php

    2. namespace app\middleware;

    3. class CorsMiddleware
    4. {
    5.     public function handle($request, \Closure $next)
    6.     {
    7.         // 设置允许所有来源的请求
    8.         header('Access-Control-Allow-Origin: *');
    9.         // 设置允许的请求方法
    10.         header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
    11.         // 设置允许的请求头
    12.         header('Access-Control-Allow-Headers: Content-Type, Authorization');

    13.         if ($request->method() === 'OPTIONS') {
    14.             // 对于预检请求,直接返回200状态码
    15.             return response('', 200);
    16.         }

    17.         return $next($request);
    18.     }
    19. }
    复制代码
    最后,在
    1. app/middleware.php
    复制代码
    文件中注册中间件:
    1. return [
    2.     // 其他中间件...
    3.     app\middleware\CorsMiddleware::class,
    4. ];
    复制代码
    使用跨域资源共享(CORS)扩展


    • 可以使用一些第三方的 CORS 扩展来简化跨域设置。例如,
      1. fruitcake/laravel-cors
      复制代码
      扩展,虽然它是为 Laravel 设计的,但也可以在 ThinkPHP 项目中使用。
    • 首先,通过 Composer 安装扩展:
    1. composer require fruitcake/laravel-cors
    复制代码

    • 然后,在项目中进行配置。在
      1. config
      复制代码
      目录下创建一个
      1. cors.php
      复制代码
      配置文件,内容如下:
    1. <?php

    2. return [
    3.     'paths' => ['api/*'],
    4.     'allowed_methods' => ['*'],
    5.     'allowed_origins' => ['*'],
    6.     'allowed_origins_patterns' => [],
    7.     'allowed_headers' => ['*'],
    8.     'exposed_headers' => [],
    9.     'max_age' => 0,
    10.     'supports_credentials' => false,
    11. ];
    复制代码

    • 最后,创建一个中间件来应用 CORS 配置。例如:
    1. <?php

    2. namespace app\middleware;

    3. use Fruitcake\Cors\HandleCors;

    4. class CorsMiddleware
    5. {
    6.     protected $cors;

    7.     public function __construct(HandleCors $cors)
    8.     {
    9.         $this->cors = $cors;
    10.     }

    11.     public function handle($request, \Closure $next)
    12.     {
    13.         return $this->cors->handle($request, $next);
    14.     }
    15. }
    复制代码
    同样,需要在
    1. app/middleware.php
    复制代码
    文件中注册这个中间件。

    使用代理服务器


    • Nginx 代理可以在 Nginx 服务器上设置代理来解决跨域问题。假设你的 ThinkPHP 应用运行在
      1. http://backend.example.com
      复制代码
      ,而前端应用在
      1. http://frontend.example.com
      复制代码
      。在 Nginx 配置文件中添加如下配置:
    1. server {
    2.     listen       80;
    3.     server_name  frontend.example.com;

    4.     location / {
    5.         proxy_pass http://backend.example.com;
    6.         proxy_set_header Host $host;
    7.         proxy_set_header X-Real-IP $remote_addr;
    8.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    9.     }
    10. }
    复制代码
    这样,前端应用访问
    1. http://frontend.example.com
    复制代码
    时,Nginx 会将请求代理到
    1. http://backend.example.com
    复制代码
    ,从而避免了跨域问题。

    • Apache 代理如果使用 Apache 作为服务器,可以通过
      1. mod_proxy
      复制代码
      模块来设置代理。在 Apache 配置文件中添加以下内容:
    1. ProxyPass / http://backend.example.com/
    2. ProxyPassReverse / http://backend.example.com/
    复制代码
    这将把所有请求代理到后端的 ThinkPHP 应用,实现跨域访问。
    到此这篇关于ThinkPHP中跨域请求设置的几种方式的文章就介绍到这了,更多相关ThinkPHP跨域请求设置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/program/333969m77.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表