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

news2024/11/29 20:54:22

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

后来在功能开发着,需要添加一个自定义的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引起的跨域问题得以解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python实战项目47:Selenium采集百度股市通数据

python实战项目47:Selenium采集百度股市通数据 一、思路分析二、完整代码一、思路分析 这里以获取百度股市通股评下的投票数据为例,页面中的其他数据同理。由于此页面数据是js动态加载的,所以采用Selenium获取数据。思路很简单,通过Selenium打开页面,然后定位到“股评”选…

《使用Gin框架构建分布式应用》阅读笔记:p212-p233

《用Gin框架构建分布式应用》学习第12天&#xff0c;p212-p233总结&#xff0c;总22页。 一、技术总结 1.JavaScript知识点 (1)class、method (2)function, arrow function, (3)fetch() (4)Promise, then() 2.bootstrap 第5章主要涉及前端技术的运用&#xff0c;作为后…

nfs作业

nfs作业 服务机&#xff1a; 编写配置文件&#xff1a; [rootlocalhost ~]# vim /etc/exports 配置文件内容&#xff1a; /nfs/shared *(ro,sync) /nfs/upload 192.168.36.0/24(rw,anonuid210,anongid210,sync) /home/tom 192.168.36.132(rw) 创建目录&#xff0c;文件&am…

紫杉醇的药物代谢-文献精读73

Hydrogen-Bond-Assisted Catalysis: Hydroxylation of Paclitaxel by Human CYP2C8 氢键辅助催化&#xff1a;人类CYP2C8对紫杉醇的羟基化 摘要 紫杉醇&#xff08;PTX&#xff0c;或称Taxol&#xff09;是一种广泛用于治疗多种癌症的化疗药物&#xff0c;经过细胞色素P450酶…

使用语言模型进行文本摘要的五个级别(llm)

视频链接&#xff1a;5 Levels Of LLM Summarizing: Novice to Expert

A Simple Semi-Supervised Learning Framework for Object Detection

1. Introduction SSL的成功主要有以下两个方面&#xff1a; &#xff08;1&#xff09;一致性正则化&#xff1a;如果对一个未标记的数据应用实际的扰动, 其预测结果不应该发生显著变化, 也就是输出具有一致性&#xff0c;通过在未标记数据上构造添加扰动后的预测结果 y~​ 与…

景区客流统计合理控制游客人数,预防意外发生

随着制造业的不断发展&#xff0c;工厂的管理和安全问题日益受到关注。为了提升生产效率和保障安全&#xff0c;许多工厂开始采用客流计数器系统。这种系统通过实时监测和控制车间内的人员数量&#xff0c;确保不超过安全规定&#xff0c;预防事故发生。本文将详细介绍工厂客流…

正则表达式以及密码匹配案例手机号码脱敏案例

目录 正则表达式 什么是正则表达式 语法 定义变量 test方法 exec方法 replace方法 match方法 修饰符 元字符 边界符 单词边界 字符串边界 边界符&#xff1a;^ 边界符&#xff1a;$ 量词 * ? {n} {n,} {n,m} 字符类 []匹配字符集合 .匹配除换行符之外的…

面向对象编程中类与类之间的关系(一)

目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员&#xff0c;必然会遇到这样的情况&#xff1a;不同的类具有共同的特征&#xff0c;至少看起来彼…

【zotero7】茉莉花抓取文献失败解决方案

1、先安装好茉莉花 工具 ----》设置按钮–》从github上下载 xpi文件 2. 配置茉莉花 选择设置–》看到茉莉花–》红色字体 pdftk下载链接&#xff1a; https://www.pdflabs.com/tools/pdftk-server/ 3.打开插件 --》扩展插件 刷新

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程&#xff0c;参见如下链接&#xff1a;修改ppt注册表&#xff0c;导出高分辨率图片 Step2. 打开PPT&#xff0c;找到自己想要保存的图&#xff0c;选中图像&#xff0c;查看图像尺寸并记录 Step3. 重新新建一个PPT&#xff0c;并根据记录的图片…

C语言 | Leetcode C语言题解之第518题零钱兑换II

题目&#xff1a; 题解&#xff1a; int change(int amount, int* coins, int coinsSize) {int dp[amount 1];bool valid[amount 1];memset(dp, 0, sizeof(dp));memset(valid, false, sizeof(valid));dp[0] 1;valid[0] true;for (int i 0; i < coinsSize; i) {for (in…

rhcsa 第二次作业

# tee:编辑文件&#xff1a;编辑文件的同时&#xff0c;标准输出也会有内容显示 # | 管道符&#xff1a;将多个命令连接起来执行&#xff0c;将|左边的命令的运行结果&#xff0c;传递给右边的命令 # ls -l | tee a.txt # >&#xff1a;输出重定向 # 使用输出…

信创环境模拟:X86架构下部署搭建aarch64的ARM虚拟机

在真实系统为x86架构下&#xff0c;搭建arm64的虚拟开发环境。在该环境中直接下载打包项目依赖的python运行环境。 前言 随着国家信创环境的要求普及&#xff0c;基本和国家沾边的政企事业单位都换成了信创环境&#xff0c;即ARM64的cpu服务器&#xff0c;而且该类服务器是不…

Cesium基础-(Entity)-(Box)

** 里边包含Vue、React框架代码详细步骤、以及代码详细解释 ** 3、Box 盒子 以下是 BoxGeometry 类的属性、方法和静态方法,以表格形式展示: 属性 属性名类型默认值描述minimumCartesian3盒子的最小 x, y, 和 z 坐标。maximumCartesian3盒子的最大 x, y, 和 z 坐标。vertex…

四个模型(CV、CA、左转CT、右转CT)的交互式多模型系统,介绍与MATLAB例程

文章目录 引言一、模型概述1.1 连续变量模型&#xff08;CV&#xff09;1.2 离散变量模型&#xff08;CA&#xff09;1.3 左转控制器&#xff08;CT&#xff09;1.4 右转控制器&#xff08;CT&#xff09; 二、交互式多模型系统2.1 系统架构 三、MATLAB实现3.1 MATLAB代码3.2 代…

软硬链接_动静态库

软硬链接 软链接创建 硬链接创建 软链接是独立文件&#xff08;独立inode号&#xff09; 硬链接不是独立文件&#xff08;inode和目标相同&#xff09; 如何理解软硬链接 软链接有独立inode&#xff0c;软链接内容上&#xff0c;保存的是文件路径 硬链接不是独立文件&#xf…

labelimg使用教程

快捷键 W&#xff1a;调出标注的十字架&#xff0c;开始标注 A&#xff1a;切换到上一张图片 D&#xff1a;切换到下一张图片 del&#xff1a;删除标注的矩形框 CtrlS&#xff1a;保存标注好的标签 Ctrl鼠标滚轮&#xff1a;按住Ctrl&#xff0c;然后滚动鼠标滚轮&#xff0c;…

Java | Leetcode Java题解之第517题超级洗衣机

题目&#xff1a; 题解&#xff1a; class Solution {public int findMinMoves(int[] machines) {int tot Arrays.stream(machines).sum();int n machines.length;if (tot % n ! 0) {return -1;}int avg tot / n;int ans 0, sum 0;for (int num : machines) {num - avg;s…

鸿蒙UI系统组件18——模态交互框(ModelDialog)

1、概 述 模态&#xff08;Modal&#xff09;指的是UI组件或视图的一种状态。在模态组件消失前&#xff0c;用户只能对处于模态的组件或视图进行响应&#xff0c;不能操作其他非模态的组件或视图。 ArkUI中可通过使用AlertDialog、CustomDialog、ActionSheet、Popup、Menu、C…