当前位置: 首页 > news >正文

前后端分离的项目使用nginx 解决 Invalid CORS request

我是这样打算的,前端用nginx代理,使用80 转443 端口走https
前端的地址就是http://yumbo.top 或https://yumbo.top

后端服务地址是:http://yumbo.top:8081

下面是我的完整配置,功能是正常的,加了注释

user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;# include /etc/nginx/conf.d/*.conf;# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。server {listen 443 ssl;   #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。server_name yumbo.top;  #将localhost修改为您证书绑定的域名,例如:www.example.com。root html;index index.html index.htm;ssl_certificate /etc/nginx/yumbo.top.pem;   #替换成您证书的文件名。ssl_certificate_key /etc/nginx/yumbo.top.key;   #替换成您证书的密钥文件名。ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。ssl_prefer_server_ciphers on;   charset utf-8;location / {root /etc/nginx/web;   #站点目录。index index.html index.htm;  }#/api是vue中配置的代理路径location /api/ {add_header Content-Type 'application/json; charset=utf-8';proxy_pass http://yumbo.top:8081/;#后端服务地址proxy_set_header Origin http://yumbo.top:8081/;#这个要和后端服务地址一样,不然会出现跨域问题proxy_set_header Host $proxy_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Access-Control-Allow-Origin *;proxy_set_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';proxy_set_header Access-Control-Allow-Headers 'Content-Type, Authorization';}}server {listen 80;server_name yumbo.top;rewrite ^(.*)$ https://${server_name}$1 permanent; }}

问题的发现

起初nginx没有配置好,出现了Invalid CORS request 或者403等之类的错误。
通过chrome无痕窗口访问网站,发现一个很奇特的现象,有个别几个接口是好的(login, menu, ringData)。
其他接口都出现了Invalid CORS request 状态403
我再三确认过axios 以及 后端springboot项目跨域都是允许的

axios我是这样配的,所有请求都是通过这个axios创建得到的axios对象,但是detail接口发现是403 response返回Invalid CORS request ,包括其他接口也都是403,就奇怪了,为什么那几个接口为什么没有出现跨域?

axios.create({baseURL: (process.env.NODE_ENV === 'production' ? process.env.server : '') + '/api',withCredentials: true,headers})

在这里插入图片描述

为了排查这个问题,我用postman去测接口。
比如去测这个detail接口https://yumbo.top/api/dashboard/ringData/detail
发现postman能成功返回数据,包括不走nginx代理,直接访问接口http://yumbo.top:8081/api/dashboard/ringData/detail
也都能正常返回数据
在这里插入图片描述

但是 !!! 部署上服务器后,就出现了上面截图 detail 跨域了。非常的困惑

后面看了这篇文章,了解了为什么会产生跨域:

  1. 403 Invalid CORS request 跨域问题 invalid+cors+request什么意思

一开始也没认真去看这篇文章,文章的内容和实际是有差别的。
有些场景可能多个因素造成跨域。

通过postman我确认了后端服务正常,nginx 80 转443 代理正常,接口能通过https://yumbo.top/api/dashboard/ringData/detail 获得数据,但是部署上去的项目就是会出现下面这种
在这里插入图片描述
因为看过之前提到的哪篇文章,我知道 跨域是根据http header中的Origin 和 Request URL进行比较。

一开始我没有怀疑是nginx的问题,因为我发现postman能够拿到接口数据,那按道理是前端axios与nginx之间的问题。

于是我尝试postman 的header中添加Origin

无非就是下面这些情况,一个一个试

  1. https://yumbo.top
  2. http://yumbo.top
  3. http://yumbo.top:8081

一开始呢,我将Origin 值和我nginx地址填的一致https://yumbo.top,我试了一下,我发现原先可以拿到接口数据的变成了和我chrome访问网站的结果一样Invalid CORS request
于是我又试了一下第3种情况 http://yumbo.top:8081 发现拿到了后端接口数据
在这里插入图片描述

于是我就回头找之前出现 Invalid CORS request 的请求头

发现Request Headers里有这个字段。于是就明白了,原来是axios自动的给请求头加了Origin,或者说是更底层 XMLRequest自动加的。
这个我们不用改axios,因为没必要改。
在这里插入图片描述
通过上述一系列的尝试,加上一些文章的内容,我们了解到,原来我遇到的跨域是因为我代理的后端服务地址http://yumbo.top:8081 而请求头中的Origin是https://yumbo.top(浏览器看到是是假的,因为后面被nginx转发了请求)

总结

得到Invalid CORS request的结果是因为Origin的值http://yumbo.top(前端浏览器,axios根据当前域自动添加的)和后端代理的接口地址http://yumbo.top:8081不一致。
我们知道nginx是可以修改请求头的,只要在nginx转发的那个地方加上Origin就可以解决这个问题。

下面是关键信息,只要这2个一致就行了

location /api/ {proxy_pass http://yumbo.top:8081/;#后端服务地址proxy_set_header Origin http://yumbo.top:8081/;#这个要和后端服务地址一样,不然会出现跨域问题
}

具体的其他一些关于nginx的配置,可以参考我前面完整的nginx配置


补充一下,为什么会出现个别请求没有出现跨域
因为后端springboot用的是@GetMapping
其他接口我都是用@PostMapping
根据我之前翻阅的文章知道,针对一些简单请求,比如get请求,或者个别请求是不会出现跨域的。
在这里插入图片描述

相关文章:

前后端分离的项目使用nginx 解决 Invalid CORS request

我是这样打算的,前端用nginx代理,使用80 转443 端口走https 前端的地址就是http://yumbo.top 或https://yumbo.top 后端服务地址是:http://yumbo.top:8081 下面是我的完整配置,功能是正常的,加了注释 user nginx; …...

回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测

回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测 目录 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测基本介绍程序设计基本介绍 SVM-Adaboost集成学习是一种将支持向量机(SVM)与AdaBoost算法相结合的集成学习…...

常见排序算法总结 (五) - 堆排序与堆操作

堆排序(借助 API) 算法思想 利用堆能够维护数组中最大值的性质,根据数组元素建立最大堆,依次弹出元素并维护堆结构,直到堆为空。 稳定性分析 堆排序是不稳定的,因为堆本质上是完全二叉树,排…...

kubernetes的三种探针ReadinessProbe、LivenessProbe和StartupProbe,以及使用示例

前言 k8s中的Pod由容器组成,容器运行的时候可能因为意外情况挂掉。为了保证服务的稳定性,在容器出现问题后能进行重启,k8s提供了3种探针 k8s的三种探针 为了探测容器状态,k8s提供了两个探针: LivenessProbe和ReadinessProbe L…...

掌握线性回归:从简单模型到多项式模型的综合指南

目录 一、说明 二、简单线性回归 三、线性回归的评估指标 3.1 线性回归中的假设 四、从头开始的简单线性回归代码 五、多元线性回归 六、多元线性回归代码 七、多项式线性回归 八、多项式线性回归代码 九、应用单变量多项式回归 十、改变多项式的次数 十一、多列多项式回归 一、…...

Java:183 基于SSM的高校食堂系统

项目介绍 基于SSM的食堂点餐系统 角色:管理员、用户、食堂 前台用户可以实现商品浏览,加入购物车,加入收藏,预定,选座,个人信息管理,收货信息管理,收藏管理,评论功能,…...

光谱相机

光谱相机是一种能够同时获取目标物体的空间图像信息和光谱信息的成像设备。 1、工作原理 光谱相机通过光学系统将目标物体的光聚焦到探测器上,在探测器前设置分光元件,如光栅、棱镜或滤光片等,将光按不同波长分解成多个光谱通道&#xff0c…...

AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法

AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法 安装好后软件运行效果: 第一步:安装ComfyUI的最新版本 1、请从下面的地址下载压缩包,并解压缩到硬盘 https://github.com/comfyanonymous/ComfyUI/releases/download/late…...

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测 目录 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现INFO-CNN-SVM向量加权算法优化卷积神经网络结…...

AES笔记整理

文章目录 1. 简介2. 密钥加法层2. 字节代换层3. 行位移 - ShiftRows4. 列混淆 - MixColumn5. 其他5.1列混淆矩阵乘法运算5.2 AES密钥生成 6. 参考资料 以下内容为信息安全开发过程中,AES对称加密算法的笔记,大部分内容转载其他文章,若描述不清…...

Jmeter 性能压测-Tomcat连接数

1、影响性能的线程状态 ①BLOCKED,如果线程中有BLOCKED,就代表有阻塞情况,需要进行排查 ②TIMED_WAITING,如果线程中有TIMED_WAITING,就代表有等待的情况,要分情况来排查 系统线程在等待(如果…...

基于Vue3的组件封装技巧分享

1、需求说明 需求背景:日常开发中,我们经常会使用一些UI组件库诸如and design vue、element plus等辅助开发,提升效率。有时我们需要进行个性化封装,以满足在项目中大量使用的需求。 错误示范:基于a-modal封装一个自定…...

python中r代表什么意思

r在python中表示什么意思? “r”是“raw”的简写。去查单词,意思是“未加工的,原料”。因此,不难想象,在python字符串前面,表示“按原样输出字符串”,也就是说字符串里的元素,原来什…...

《量子计算对人工智能发展的深远影响》

在科技发展的浪潮中,量子计算与人工智能无疑是两颗璀璨的明星,二者的融合正引领着一场深刻的科技变革. 量子计算的独特之处在于其利用量子比特的叠加和纠缠特性,能够实现并行计算,从而在处理复杂问题时展现出超越传统计算的巨大潜…...

12.2【JAVA EXP4]next.js的各种问题,DEBUG,前端补强,前后端交互,springSecurity ,java 配置,h2数据库

在服务器组件中使用了 useState 这样的 React Hook。useState 只能在客户端组件中使用,而不能在服务器组件中使用。Next.js 的新架构(App Router)中,默认情况下,页面和布局组件是服务器组件,因此不能直接使…...

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题:1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法: 最简单的方式: docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World: docker…...

使用 Netty 实现 RPC 通信框架

使用 Netty 实现 RPC 通信框架 远程过程调用(RPC,Remote Procedure Call) 是分布式系统中非常重要的通信机制。它允许客户端调用远程服务器上的方法,就像调用本地方法一样。RPC 的核心在于屏蔽底层通信细节,使开发者关…...

【机器学习06--贝叶斯分类器】

文章目录 基础理解01 贝叶斯决策论02 极大似然估计03 朴素贝叶斯分类器04 半朴素贝叶斯分类器05 贝叶斯网06 EM算法 补充修正1. 贝叶斯定理与分类的基本概念2. 贝叶斯决策论3. 极大似然估计4. 朴素贝叶斯分类器5. 半朴素贝叶斯分类器6. 贝叶斯网7. EM算法 面试常考 基础理解 本…...

创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】

🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持续下去的动力! 目录 一. 简单汇总一下创建…...

[146 LRU缓存](https://leetcode.cn/problems/lru-cache/)

分析 维护一个双向链表保存缓存中的元素。 如果元素超过容量阈值,则删除最久未使用的元素。为了实现这个功能,将get(), put()方法获取的元素添加到链表首部。 为了在O(1)时间复杂度执行get()方法,再新建一个映射表,缓存key与链表…...

从 0 到 1:用魔珐星云打造真实可用的智能健身私教【技术原理文章】

> 我在学习具身智能的实战文章,本文为技术文章,非广告一、健身交互痛点:传统数字人 / 健身工具缺失沉浸式陪伴式互动日常健身长期存在行业共性痛点:不管是纯视频课程,还是传统云端实时交互数字人,都难以…...

【收藏干货】2026年AI Coding全面爆发!程序员终极职业升级攻略,告别被替代焦虑

2026年,AI编码技术迎来规模化落地爆发期,行业彻底告别“人工纯编码”的传统模式。对于所有程序员而言,当下最核心的生存与发展策略,早已不是埋头敲代码,而是从“被动写代码的执行者”全面升级为“主动驾驭AI的价值创造…...

MySQL高频面试题-02

这一篇的主题:日志双写机制、深分页瓶颈,以及死锁怎么查。上次和大家聊了 B 树和 MVCC,今天这篇我们直接上硬菜。在社招或者大厂面试中,面试官往往不满足于只问你“什么是索引”,他们更喜欢切入高并发、大数量、分布式的真实场景。…...

大模型推理优化:激活稀疏性技术解析与实践

1. 大模型推理优化的核心挑战与机遇在自然语言处理领域,大型语言模型(LLM)的推理效率已成为制约其广泛应用的关键瓶颈。以GPT-3 175B为例,单次推理需要约350GB显存和数千亿次浮点运算,这对硬件资源提出了极高要求。传统…...

Windows curl证书错误SEC_E_UNTRUSTED_ROOT解决方案

1. 这个错误不是curl的问题,而是Windows在替你“把关” 你在Windows命令行里敲下 curl https://api.example.com ,结果弹出一串红色报错: curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - T…...

Translumo:实时屏幕翻译工具的完整实战指南

Translumo:实时屏幕翻译工具的完整实战指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 你是否在玩外语游戏…...

LLM、Agent与Multi-Agent全面对比:优势、劣势与应用场景分析

引言大语言模型(Large Language Model,LLM)的出现,让机器具备了前所未有的语言理解和生成能力。然而,单纯的LLM就像一个博学但困在图书馆里的学者——它能回答问题、撰写文章,却无法主动采取行动。于是&…...

CANN Rotary Embedding 融合算子:解锁千问大模型推理性能的 3 倍密钥

CANN Rotary Embedding 融合算子:解锁千问大模型推理性能的 3 倍密钥 导语:在大模型推理的“微操”中,位置编码(Positional Encoding)往往被视为理所当然的开销。然而,在昇腾(Ascend&#xff0…...

Veo生成模糊/断帧/色偏?立刻停用默认设置!20年视频架构师紧急发布的5项必改Veo 2K/4K硬核配置

更多请点击: https://intelliparadigm.com 第一章:Veo 2K/4K视频生成质量崩塌的根源诊断 当Veo模型在2K或4K分辨率下输出视频时,高频细节严重丢失、运动伪影显著增强、纹理结构模糊化,这一现象并非单纯算力不足所致,而…...

拆解正点原子STM32F103综合例程:如何用一块MCU实现MP3播放器、NES游戏机和简易手机?

STM32F103多功能系统设计:从MP3播放器到NES游戏机的工程实践 在嵌入式系统开发领域,如何利用有限资源实现复杂功能一直是工程师面临的挑战。正点原子STM32F103战舰开发板的综合例程展示了这款经典MCU的强大潜力——通过精心设计的软件架构,将…...