Tips:用proxy解决前后端分离项目中的跨域问题

在前后端分离项目中,"跨域问题"是浏览器基于同源策略(Same-Origin Policy)对跨域请求的安全限制。当你的前端(如运行在  http://localhost:3000 )和后端(如运行在  http://localhost:8080 )域名/端口/协议不同时,浏览器会拦截请求并抛出  CORS  错误。

一、为什么需要代理(Proxy)

通过配置代理服务器(Proxy),可以绕过浏览器限制,让前端请求通过中间层转发到后端。

核心原理:

1.请求路径伪装:

前端请求发送到同源的代理服务器(如  http://localhost:3000/api ),而非直接请求不同源的后端地址(如  http://localhost:8080/api )。

2.服务端无同源限制:

代理服务器通过 Node.js 或 Nginx 等工具实现请求转发,服务端之间的通信不受浏览器同源策略限制。

二、如何用 Proxy 解决跨域?(以 Vue/React 项目为例)


1.Vue CLI 项目


在  vue.config.js  中配置:

   module.exports = {devServer: {proxy: {'/api': {                          // 拦截以 /api 开头的请求target: 'http://localhost:8080', // 后端地址changeOrigin: true,              // 修改请求头中的 Origin 为目标地址(关键!)pathRewrite: {'^/api': ''                    // 重写路径(删除 /api 前缀)}}}}}


2.React 项目


在  src/setupProxy.js  中使用  http-proxy-middleware :

   const { createProxyMiddleware } = require('http-proxy-middleware');module.exports = function(app) {app.use('/api',createProxyMiddleware({target: 'http://localhost:8080',changeOrigin: true,pathRewrite: { '^/api': '' }}));};


生产环境配置(以 Nginx 为例)

server {listen 80;server_name your-domain.com;location /api {proxy_pass http://backend-server:8080;  # 后端服务地址
​proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location / {root /usr/share/nginx/html;  # 前端静态资源目录try_files $uri $uri/ /index.html;}
}


三、关键细节说明


 1.changeOrigin: true  的作用
修改请求头中的  Origin  为后端地址,避免某些后端框架因 Origin 不匹配而拒绝请求。
2.路径重写(pathRewrite)
若后端接口没有统一前缀(如  /api ),可通过  pathRewrite  删除代理前缀,使请求路径符合后端路由。
3.预检请求(OPTIONS)处理
当请求为复杂类型(如  Content-Type: application/json )时,浏览器会先发送  OPTIONS  预检请求。代理需确保能正确处理此类请求。

四、其他跨域解决方案对比


方案    适用场景    优缺点
Proxy    开发/生产环境通用    无需后端配合,配置灵活
CORS    生产环境    标准化方案需后端设置相应头
JSONP    仅限GET请求    兼容性高安全性低,已逐渐淘汰


五、调试技巧


1.查看代理日志
在代理配置中添加  logLevel: 'debug' (Node.js)或开启 Nginx 的  access_log ,观察请求是否被正确转发。
2.浏览器开发者工具
检查请求 URL 是否指向代理路径,而非直接访问后端地址。
3.Postman 验证
直接请求后端接口,确认接口本身是否可用(排除代理以外的错误)。
如果遇到具体问题(如代理后仍报 404 错误),可以提供你的代码片段或配置,我会帮你进一步分析

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

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

相关文章

基于 Qt 的图片处理工具开发(一):拖拽加载与基础图像处理功能实现

一、引言 在桌面应用开发中,图片处理工具的核心挑战在于用户交互的流畅性和异常处理的健壮性。本文以 Qt为框架,深度解析如何实现一个支持拖拽加载、亮度调节、角度旋转的图片处理工具。通过严谨的文件格式校验、分层的架构设计和用户友好的交互逻辑&am…

设计模式:依赖倒转原则 - 依赖抽象,解耦具体实现

一、为什么用依赖倒转原则? 在软件开发中,类与类之间的依赖关系是架构设计中的关键。如果依赖过于紧密,系统的扩展性和维护性将受到限制。为了应对这一挑战,依赖倒转原则(Dependency Inversion Principle,…

vue+d3js+fastapi实现天气柱状图折线图饼图

说明: vued3jsfastapi实现天气柱状图折线图饼图 效果图: step0:postman 1. 生成天气数据(POST请求):URL: http://localhost:8000/generate-data/?year2024&month3&seed42 方法: POST Headers:Content-Type:…

UE5,LogPackageName黄字警报处理方法

比如这个场景,淘宝搜索,ue5 T台,转为ue5.2后,选择物体,使劲冒错。 LogPackageName: Warning: DoesPackageExist called on PackageName that will always return false. Reason: 输入“”为空。 2. 风险很大的删除法&…

量子代理签名:量子时代的数字授权革命

1. 量子代理签名的定义与核心原理 量子代理签名(Quantum Proxy Signature, QPS)是经典代理签名在量子信息领域的延伸,允许原始签名者(Original Signer)授权给代理签名者(Proxy Signer)代为签署文…

【ESP32-C6】Base on esptool commands to enable Flash Encryption and Secure Boot

Please refer to Security Guides Security Overview Flash Encryption Secure Boot v2 Security Features Enablement Workflows Vulnerabilities You can base on “esp-idf/examples/security/flash_encryption” example for testing. Partition Table setting&#…

Kotlin 学习-方法和参数类型

/*** kotlin 的方法有三种* */fun main() {/*** 方法一* 1.普通类的成员方法申明与调用* (1)需要先构建出实例对象,才能访问成员方法* (2)实例对象的构建只需要在类名后面加上()* */Person().test()/*** 方法二&#x…

头歌 | WPS文档基本操作

若为出现预期结果可私信我答疑 2025年4月9日 第1关:新建WPS文档和保存文档 在本地创建一个1.sh,内容写入echo 我的第一个WPS文档.docx创建成功点击工具栏 点击上传文件把刚刚创建的1.sh上传 点击图形化 点击workspace>userfiles, 复制上传的文件1.sh返回上一级…

使用docker 安装向量数据库Milvus

Miluvs 官网 www.milvus.io/ https://milvus.io/docs/zh/install_standalone-docker-compose-gpu.md 一、基本概念 向量数据库:Milvus是一款云原生向量数据库,它支持多种类型的向量,如浮点向量、二进制向量等,并且可以处理大规模…

ps 人像学习

视频: 一ps快捷键 1.1 创建图层 ctrlj 1.2 放大缩小图片的大小 按住alt 滚轮 1.3 移动图片 空格 左键 1.4 撤回 ctrlz 二 精修的第一步是去除斑点,瑕疵, 2.1 污点修复画笔工具 新建一个图层,点击污点修复工具进行修复…

数据结构第五版【李春葆】

​ 数据结构教程上机实验指导第5版(李春葆主编).pdf 数据结构教程(第5版)(李春葆).pdf 数据结构教程(第五版)课后习题参考答案(李春葆).pdf 数据结构教…

(二十三)安卓开发中数据存储之Room详解

在安卓开发中,Room 是一个强大的本地数据库解决方案,它是 Android Jetpack 的一部分,基于 SQLite 构建,提供了更高层次的抽象。Room 简化了数据库操作,减少了样板代码,同时支持与 LiveData 和 ViewModel 的…

[C++面试] 初始化相关面试点深究

一、入门 1、C中基础类型的初始化方式有哪些?请举例说明 ​默认初始化​ 对于全局变量和静态变量,基础类型(如int、float、double等)会被初始化为 0;而对于局部变量,其值是未定义的,包含随机…

网络安全之-信息收集

域名收集 域名注册信息 站长之家 https://whois.chinaz.com/ whois 查询的相关网站有:中国万网域名WHOIS信息查询地址: https://whois.aliyun.com/西部数码域名WHOIS信息查询地址: https://whois.west.cn/新网域名WHOIS信息查询地址: http://whois.xinnet.com/domain/whois/in…

Linux网络http与https

应用层协议HTTP 提示 因为现在大多数都是https,所以就用https来介绍http,https比http多了一个加密功能,不影响介绍http。 什么是http 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的…

讲解贪心算法

贪心算法是一种常用的算法思想,其在解决问题时每一步都做出在当前状态下看起来最优的选择,从而希望最终能够获得全局最优解。C作为一种流行的编程语言,可以很好地应用于贪心算法的实现。下面我们来讲一篇关于C贪心算法的文章。 目录 贪心算法…

vue3中watch的使用示例

使用情况说明: 1、父组件中有个表格,点击表格行的修改基础信息,弹出修改对话框; 2、修改内容点击确认,发送请求,后端更新数据;不修改内容不发送请求; 3、可以连续修改&#xff1b…

Spring MVC 请求类型注解详解

Spring MVC 请求类型注解详解 1. 核心注解分类 Spring MVC 中的请求处理注解分为以下几类: 类别注解示例作用范围方法级注解RequestMapping, GetMapping 等方法级别参数级注解RequestParam, RequestBody方法参数模型/会话注解ModelAttribute, SessionAttributes方…

C#: DxF文件中Spline解析

以下是使用C#解析DXF文件中Spline(样条曲线)的完整代码示例,使用流行的netDxf库来处理DXF文件: 1. 安装netDxf库 首先通过NuGet安装netDxf库: Install-Package netDxf 2. 完整Spline解析代码 using System; using System.Collections.Ge…

【软考系统架构设计师】系统架构设计知识点

1、 从需求分析到软件设计之间的过渡过程称为软件架构。 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。 软件架构不仅指定了系统的组织结构和…