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

教程下载地址: 网赚博客http://www.piaodoo.com/创业项目排行榜前十名http://www.piaodoo.com/


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

1.nginx配置允许跨域

worker_processes  1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;

server {
	listen 80;
	# 域名
	server_name localhost;
	# 服务器根目录
	root H:\php\project\UserManager\public;
	# 默认读取的文件
	index index.php index.html index.htm;

	location / {
		# 允许浏览器跨域请求
		if ($request_method = 'OPTIONS') {
            add_header Access-Control-Allow-Origin '*';
            add_header Access-Control-Allow-Headers '*';
            add_header Access-Control-Allow-Methods '*';
            add_header Access-Control-Allow-Credentials 'true';
            return 204;
        }
        

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

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

}

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

2.在ThinkPHP中允许跨域

编辑middleware.php文件

<?php
// 全局中间件定义文件
return [
    //允许跨域
    //\think\middleware\AllowCrossDomain::class
    \app\middleware\AllowCrossDomain::class
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
];
<?php
declare (strict_types = 1);

namespace app\middleware;

use Closure;
use think\Config;
use think\Request;
use think\Response;

/**

  • 跨域请求支持
    */
    class AllowCrossDomain
    {
    protected $cookieDomain;

    protected $header = [
    ‘Access-Control-Allow-Credentials’ => ‘true’,
    ‘Access-Control-Max-Age’ => 1800,
    ‘Access-Control-Allow-Methods’ => ‘GET, POST, PATCH, PUT, DELETE, OPTIONS’,
    ‘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’,
    ];

    public function __construct(Config $config)
    {
    $this->cookieDomain = $config->get(‘cookie.domain’, ‘’);
    }

    /**

    • 允许跨域请求

    • @access public

    • @param Request $request

    • @param Closure $next

    • @param array $header

    • @return Response
      */
      public function handle($request, Closure $next, ? array $header = [])
      {
      h e a d e r = ! e m p t y ( header = !empty( header=!empty(header) ? array_merge($this->header, $header) : $this->header;

      if (!isset($header[‘Access-Control-Allow-Origin’])) {
      $origin = $request->header(‘origin’);

       if ($origin &amp;&amp; ('' == $this-&gt;cookieDomain || strpos($origin, $this-&gt;cookieDomain))) {
           $header['Access-Control-Allow-Origin'] = $origin;
       } else {
           $header['Access-Control-Allow-Origin'] = '*';
       }
      

      }

      return n e x t ( next( next(request)->header($header);
      }
      }

到此这篇关于Nginx+ThinkPHP+Vue解决跨域问题的方法详解的文章就介绍到这了,更多相关Nginx ThinkPHP解决跨域内容请搜索网赚博客http://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持网赚博客http://www.piaodoo.com/!

                        友情连接:  

茂名一技http://www.szsyby.net/


茂名一技http://www.enechn.com/


美文集http://www.tpyjn.cn/


手游排行前十名http://www.bjkhrx.com/

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值