网络请求自定义header导致跨域问题

我记得我的项目之前已经解决了跨域问题。

后来在功能开发着,需要添加一个自定义的header,发现又出现跨域报错。

于是又开始一通摸索折腾。

我的项目前面端是用axios网络请求,通过拦截器添加header,代码如下:

复制代码
//添加请求拦截器
instance.interceptors.request.use(config => {

    const ss = useTokenStore();

    const cc = useCompanyCodeStore();

    
 
    if(ss.token){
            //pinia中定义的ref数据不需要.value
            config.headers['Authorization'] = ss.token;
    } else{
        console.info("登录接口,不需要token")
    }

    if(cc.company_code){
        config.headers['Code'] = cc.company_code;
    }

    return config;
}, error => {
  return Promise.reject(error);
});

一直报跨域问题!!!!!

我后端用的ThinkPhp,网上搜索了各种解决跨域的配置,折腾了好久。最后这样解决了:

1.在自己的项目里创建一个中间件文件MyCrossDomain.php

2.创建一个中间件配置文件,只要配置了中间件,Thinkphp5.1以上的版本中Controller里不用显示调用,系统默认会使用它。

我的目录结构是这样的:

MyCrossDomain.php文件 在这里我添加了自己需要的header: "Code"

复制代码
<?php
namespace app\admin\middleware;

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

/**
 * 跨域请求支持
 */
class MyCrossDomain
{
    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'     => 'Authorization, Code,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 $request, Closure $next, array $header = []): Response
    {
        $header = !empty($header) ? array_merge($this->header, $header) : $this->header;

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

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

        return $next($request)->header($header);
    }
}

middleware.php文件

复制代码
<?php

//admin 项目 配置中间件
use app\admin\middleware\MyCrossDomain;

return [
     MyCrossDomain::class
]; 

在经历了无数次失败后,终于看到了200返回响应。并且在header中看到了自己添加的Code

至此困扰我两天的添加自定义header引起的跨域问题得以解决。

相关推荐
雪芽蓝域zzs1 小时前
第十四节:后端返回权限动态路由
前端·javascript·vue.js
Rain5091 小时前
谁动了我的 URL?——记一次微前端“灵异 Bug“的排查实录
前端·vue.js·人工智能·前端框架·bug·ai编程
何以解忧,唯有..2 小时前
Vue 3 响应式核心:ref() 与 reactive() 的深入解析与实战
前端·javascript·vue.js
宿67412 小时前
vue3-async
前端·javascript·vue.js
Dreams°12318 小时前
【Java后端+Vue前后端分离:内网正常、公网访问异常|5个高频经典踩坑完整复盘】
java·开发语言·vue.js
小蒜学长18 小时前
基于Springboot+Vue的环保行动志愿者招募系统设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
天道kabuto19 小时前
踩坑复盘:为什么在输入框按个回车,页面就偷偷刷新了?
vue.js
吴长建先生19 小时前
Vue.js支付回调页面如何设计才能保障对账准确性?
vue.js
leoZ23120 小时前
第 2 篇:搭建地基——Vue3 + Vite + Tailwind v4 + shadcn-vue
前端·javascript·vue.js·人工智能·目标检测·数据挖掘·语音识别
吴长建先生20 小时前
支付回调接口设计与代码规范:如何提升团队工程化能力
vue.js