设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 116|回复: 10

Nginx+ThinkPHP+Vue解决跨域问题的方法详解

[复制链接]

1

主题

45

回帖

113

积分

注册会员

积分
113
发表于 2024-4-20 09:40:42 | 显示全部楼层 |阅读模式
目录

解决过程主要有两个步骤。

1.nginx配置允许跨域
  1. worker_processes  1;

  2. events {
  3.     worker_connections  1024;
  4. }

  5. http {
  6.     include       mime.types;
  7.     default_type  application/octet-stream;
  8.     sendfile        on;
  9.        
  10.     server {
  11.                 listen 80;
  12.                 # 域名
  13.                 server_name localhost;
  14.                 # 服务器根目录
  15.                 root H:\php\project\UserManager\public;
  16.                 # 默认读取的文件
  17.                 index index.php index.html index.htm;

  18.                 location / {
  19.                         # 允许浏览器跨域请求
  20.                         if ($request_method = 'OPTIONS') {
  21.                 add_header Access-Control-Allow-Origin '*';
  22.                 add_header Access-Control-Allow-Headers '*';
  23.                 add_header Access-Control-Allow-Methods '*';
  24.                 add_header Access-Control-Allow-Credentials 'true';
  25.                 return 204;
  26.             }
  27.             

  28.                         if (!-e $request_filename) {
  29.                                 rewrite ^(.*)$ /index.php?s=/$1 last; break;
  30.                         }
  31.                         try_files $uri $uri/ /index.php?$query_string;
  32.                 }

  33.                 # 监听127.0.0.1:9000端口,要和php-cgi.exe配置的ip:端口一致
  34.                 location ~ \.php$ {
  35.                         fastcgi_pass 127.0.0.1:9000;
  36.                         include fastcgi_params;
  37.                         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  38.                 }
  39.         }

  40. }
复制代码
其中的“允许浏览器跨域请求”是关键点,因为浏览器在发现网页请求是跨域请求时,会再发送一个OPTIONS请求,只有这个请求成功了才会允许跨域请求,此时,要强行配置允许跨域。(这里配置的是允许全部请求跨域)

2.在ThinkPHP中允许跨域

编辑middleware.php文件
  1. <?php
  2. // 全局中间件定义文件
  3. return [
  4.     //允许跨域
  5.     //\think\middleware\AllowCrossDomain::class
  6.     \app\middleware\AllowCrossDomain::class
  7.     // 全局请求缓存
  8.     // \think\middleware\CheckRequestCache::class,
  9.     // 多语言加载
  10.     // \think\middleware\LoadLangPack::class,
  11.     // Session初始化
  12.     // \think\middleware\SessionInit::class
  13. ];
复制代码
  1. <?php
  2. declare (strict_types = 1);

  3. namespace app\middleware;

  4. use Closure;
  5. use think\Config;
  6. use think\Request;
  7. use think\Response;

  8. /**
  9. * 跨域请求支持
  10. */
  11. class AllowCrossDomain
  12. {
  13.     protected $cookieDomain;

  14.     protected $header = [
  15.         'Access-Control-Allow-Credentials' => 'true',
  16.         'Access-Control-Max-Age'           => 1800,
  17.         'Access-Control-Allow-Methods'     => 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
  18.         'Access-Control-Allow-Headers'     => 'Token, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With',
  19.     ];

  20.     public function __construct(Config $config)
  21.     {
  22.         $this->cookieDomain = $config->get('cookie.domain', '');
  23.     }

  24.     /**
  25.      * 允许跨域请求
  26.      * @access public
  27.      * @param Request $request
  28.      * @param Closure $next
  29.      * @param array   $header
  30.      * @return Response
  31.      */
  32.     public function handle($request, Closure $next, ? array $header = [])
  33.     {
  34.         $header = !empty($header) ? array_merge($this->header, $header) : $this->header;

  35.         if (!isset($header['Access-Control-Allow-Origin'])) {
  36.             $origin = $request->header('origin');

  37.             if ($origin && ('' == $this->cookieDomain || strpos($origin, $this->cookieDomain))) {
  38.                 $header['Access-Control-Allow-Origin'] = $origin;
  39.             } else {
  40.                 $header['Access-Control-Allow-Origin'] = '*';
  41.             }
  42.         }

  43.         return $next($request)->header($header);
  44.     }
  45. }
复制代码
到此这篇关于Nginx+ThinkPHP+Vue解决跨域问题的方法详解的文章就介绍到这了,更多相关Nginx ThinkPHP解决跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

1

主题

53

回帖

129

积分

注册会员

积分
129
发表于 2024-7-3 18:58:13 | 显示全部楼层
感谢分享,受益匪浅!

2

主题

34

回帖

114

积分

注册会员

积分
114
发表于 2024-7-5 14:52:42 | 显示全部楼层
我不确定这个信息的准确性,请再确认一下

1

主题

44

回帖

120

积分

注册会员

积分
120

热心会员付费会员

发表于 2024-7-22 22:56:42 | 显示全部楼层
保持尊重和礼貌对待其他成员是必要的。

0

主题

61

回帖

122

积分

注册会员

积分
122
发表于 2024-8-9 03:34:33 | 显示全部楼层
我完全同意你的观点

0

主题

54

回帖

109

积分

注册会员

积分
109
发表于 2024-8-28 15:57:07 | 显示全部楼层
顶一个,观点非常中肯!
  • 打卡等级:无名新人
  • 打卡总天数:2
  • 打卡月天数:0
  • 打卡总奖励:9
  • 最近打卡:2024-05-05 22:04:24

3

主题

47

回帖

172

积分

注册会员

积分
172
发表于 2024-8-29 12:26:23 | 显示全部楼层
666666666666666666

1

主题

45

回帖

109

积分

注册会员

积分
109
发表于 2024-9-4 17:33:21 | 显示全部楼层
每日一回

1

主题

57

回帖

137

积分

注册会员

积分
137
发表于 2024-9-7 11:12:08 | 显示全部楼层
666666666666

3

主题

51

回帖

169

积分

注册会员

积分
169
发表于 2024-10-5 04:11:27 | 显示全部楼层
我不太确定,可能需要再确认一下。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-15 11:50 , Processed in 0.104649 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

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