📘 前端项目中跨域问题及解决方式详解(Vite 项目)


一、🌐 什么是跨域?

跨域(Cross-Origin) 指的是在浏览器中,前端页面与服务器之间的协议、域名或端口不一致而引发的安全限制。

✅ 浏览器的同源策略(Same-Origin Policy)

浏览器只允许前端访问同源资源

  • 协议相同(http/https)

  • 域名相同(localhost/example.com)

  • 端口相同(:3000 / :5173)


二、⚠️ 跨域的典型场景

本地开发环境(Vite):

  • 页面地址:http://localhost:5173

  • 接口地址:https://api.xxx.com

你请求:

fetch('https://api.xxx.com/user/list')

会被浏览器拦截,提示:跨域访问被阻止(CORS error)


三、🚀 如何在 Vite 项目中解决跨域?

✅ 方法:使用 Vite 的代理功能 server.proxy

让本地开发服务器(Vite 内部基于 Node.js 的 server)做代理请求,从而避开浏览器的跨域检查。

🔧 配置方式如下:

// vite.config.js / vite.config.ts
export default defineConfig({server: {proxy: {'/api': {target: 'https://api.xxx.com', // 实际接口地址changeOrigin: true,            // 更改请求头中的 originrewrite: path => path.replace(/^\/api/, '') // 重写路径}}}
})

四、🔄 请求转发流程图解

你写的代码:
fetch('/api/user/list')↓ 实际发起请求http://localhost:5173/api/user/list(本地,不跨域)↓ 被 Vite dev server 拦截转发请求到:
https://api.xxx.com/user/list↓ 后端正常响应Vite 收到响应后返回给前端

✅ 浏览器认为请求仍是同源(localhost:5173),所以不会拦截。


五、📌 proxy 配置参数详解

配置项说明
target要代理转发的目标地址
changeOrigin是否更改请求头中的 origin 字段(大多数后端要求为 true)
rewrite重写路径(如把 /api/user 转为 /user

六、📦 项目部署后是否还需要代理?

不需要!

生产环境打包后,页面与接口通常部署在同一个主域名或使用 nginx 做反向代理,此时不会跨域。

但如果接口仍然来自其他域名:

  • ✅ 后端需配置 CORS 响应头

  • 或使用 nginx / 网关代理解决


在项目中,本地开发阶段我通过配置 Vite 的 server.proxy/api 请求代理到真实后端接口,解决浏览器的跨域限制问题。这样前端请求看似是本地同源,其实由 Vite 的开发服务器中转并转发到目标后端,避免了 CORS 错误。

上线后通常不需要 proxy,接口一般会部署到同域名,或由网关统一做转发。


🧩 一、Webpack 中如何解决跨域?

Webpack 本身不具备跨域代理功能,但它内置的开发服务器 —— webpack-dev-server 提供了代理(proxy)功能,可以实现与 Vite 类似的跨域解决方案。

✅ 常用方式:配置 devServer.proxy

示例:webpack.config.js

module.exports = {// ... 其他配置devServer: {proxy: {'/api': {target: 'https://api.xxx.com',   // 实际后端地址changeOrigin: true,              // 修改 origin 头,防止被后端拒绝pathRewrite: { '^/api': '' },    // 可选:去除路径中的 /api}}}
}

🔁 工作原理:

跟 Vite 类似:

前端请求:     http://localhost:8080/api/user/list
webpack dev server 拦截并转发给:https://api.xxx.com/user/list

🆚 二、Vite vs Webpack 的跨域代理配置区别

项目Webpack (webpack-dev-server)Vite (vite.config.js)
配置位置devServer.proxyserver.proxy
是否原生支持需要依赖 webpack-dev-server原生支持
路径重写pathRewrite: { '^/api': '' }rewrite: path => path.replace(/^\/api/, '')
修改 OriginchangeOrigin: truechangeOrigin: true
支持 WebSocket需要配置 ws: true默认支持
是否用 ES Module基于 CommonJS 配置基于 ESM 配置(支持 TypeScript)
适配调试体验相对稍复杂,热更新速度慢快速热更新,默认支持现代浏览器特性

🧠 面试回答建议

在使用 Webpack 进行本地开发时,我们通过配置 devServer.proxy 来实现接口代理,将以 /api 开头的请求代理到后端真实地址,以解决开发过程中的跨域问题。这个机制与 Vite 的 server.proxy 类似,都是由本地开发服务器中转,避免浏览器 CORS 限制。

不同点在于,Vite 使用的是原生 ES 模块和现代浏览器特性,配置更加简洁,启动和热更新更快;Webpack 配置稍复杂但生态成熟,适用于老项目或对构建控制要求较高的场景。


✅ 总结一句话

Webpack 和 Vite 都通过“本地开发服务器代理”的方式解决跨域,本质一致,但 Vite 配置更简单,开发体验更好。


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

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

相关文章

代码审计-Struts2漏洞分析

一、Struts2介绍 Struts2 是一个基于 MVC(Model-View-Controller) 设计模式的开源 Java Web 应用框架,由 Apache 软件基金会维护。它是 Struts1 和 WebWork 框架的整合产物,以 WebWork 为核心,通过拦截器机制实现业务逻…

三、神经网络——网络优化方法

三、网络优化方法 1.梯度下降算法梯段下降算法是一种寻找使损失函数最小化的方法,从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向,所以有WijnewWijold−η∂E∂WijW_{ij}^{new} …

HTML/JOSN复习总结

HTML 基础 什么是 HTML? 1.HTML是一门语言,所有的网页都是用HTML这门语言编写出来的 2.HTML(HyperText Markup Language):超文本标记语言。 >超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内…

Golang中的内置类型

A. int B. string C. struct D. array 首先,内置类型是指不需要引入任何关于这些数据类型的包,就可以引用的数据类型。那么,内置类型主要包括基本类型,复合类型,控制并发,高级抽象,特殊类型。…

通过命名空间引用了 Application 类,php不会自动包含路径文件吗?

示例代码:报错提示找不到Application类 use mvc\core\Application;$app new Application(); // 定义路由 $app->get(/, HomeControllerindex); $app->get(/user, UserControllershow); $app->post(/user, UserControllercreate);// 运行应用 $app->run…

PlantUML 基础使用技术文档

目录 摘要 1. 什么是 PlantUML 2. 安装与环境配置 2.1 本地使用 2.2 在线使用 3. 基本语法 3.1 示例:系统架构图 3.2 常用元素 4. 渲染方式 4.1 VSCode 4.2 在线渲染 4.3 生成图片 5. 推荐实践 6. 常见图类型 7. 进阶功能 8. 典型应用场景 摘要 Pl…

Android Notification 通过增加addAction 跳转回Service重新执行逻辑

1.场景描述在App内升级过程中,apk下载过程中网络波动导致连接超时,下载失败后Service生命周期结束。前台通知也被清除。2.解决思路在通知栏中增加重试按钮重启下载服务。3.代码NotificationManager mNotificationManager (NotificationManager) getSy…

带货视频评论的用户洞察 科大讯飞AI算法赛 Datawhale AI夏令营

赛题 2025 iFLYTEK AI开发者大赛https://challenge.xfyun.cn/topic/info?typevideo-comment-insight 一、赛事背景 在电商直播爆发式增长的数字化浪潮下,短视频平台积累了海量带货视频及用户互动数据。这些数据不仅是消费者对商品体验的直接反馈,更蕴…

JAVA生成PDF(itextpdf)

java生成PDF有多种方式&#xff0c;比如itextpdf、 Apache PDFBox、Flying Saucer (XHTMLRenderer)、 OpenPDF等。今天要介绍的是itextpdf&#xff0c;及在开发过程中处理的问题。1. 引入POM<!--PDF导出POM--><dependency><groupId>com.itextpdf</groupId…

[爬虫知识] 深入理解多进程/多线程/协程的异步逻辑

相关爬虫实战案例&#xff1a;[爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 逆向知识点合集 前言&#xff1a; 面对海量的目标数据&#xff0c;传统单线程、同步的爬取方式往往效率低下&#x…

Oracle RAC 11.2.0.4 更新SYSASM和SYS密码

前言 从技术角度看&#xff0c;SYSASM是Oracle 10g R2引入的ASM管理员角色&#xff0c;而SYS是数据库实例的超级用户&#xff0c;SYS账户无法管理ASM磁盘组。SYSASM权限是集群级别的&#xff0c;比如在添加磁盘组时&#xff0c;这个操作会影响所有节点&#xff1b;而SYS用户的权…

Vue》》总结

官网 vue路由的query参数、mixin 混入 vue cli 脚手架之配置代理 VUE SAP、 MPA&#xff0c;&#xff0c;组件开发、VDOM、双向数据绑定 Vue Props 、Mixin 、路由守卫 vue router query参数 Vue props以及其他通信方式, vue响应式 原理 追加响应式数据&#xff0c;数组响应式 …

Nginx 中的负载均衡策略

Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;广泛用于负载均衡场景。它支持多种负载均衡策略&#xff0c;可以帮助你优化资源利用、提高响应速度和增加系统的可用性。以下是 Nginx 中几种常见的负载均衡策略及其配置方法&#xff1a; 1. 轮询&#xff08;Round Rob…

用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析

一、背景引入&#xff1a;从“人工整理”到“自动化处理”的转变 在英语学习过程中&#xff0c;我们经常会接触各种分组整理的词汇表&#xff0c;比如“Group1”对应一组单词及释义&#xff0c;随后是“Group2”、“Group3”等等。如果你下载了一个 .txt 格式的四级词汇表&…

Ffmpeg滤镜

打开设备 添加滤镜 循环录制文件 #include "libavdevice/avdevice.h" #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" #include "libavfilter/buffersink.h" #incl…

HarmonyOS AI辅助编程工具(CodeGenie)UI生成

UI Generator基于BitFun Platform AI能力平台&#xff0c;用于快速生成可编译、可运行的HarmonyOS UI工程&#xff0c;支持基于已有UI布局文件&#xff08;XML&#xff09;&#xff0c;快速生成对应的HarmonyOS UI代码&#xff0c;其中包含HarmonyOS基础工程、页面布局、组件及…

【第三节】ubuntu server配置远程连接

首先在ubuntu server中查看ip&#xff0c;打开虚拟机&#xff0c;输入ip addr show ,这个命令很好记&#xff0c;几乎就是英文自然语言 下面我们准备远程连接工具&#xff0c;我选择的开源的ET&#xff0c;全称是electerm,圈起来的是必须输入的内容&#xff0c;输入完成后点击保…

CCS-MSPM0G3507-7-模块篇-MPU6050的基本使用

前言本篇我们接收对MPU6050的基本使用&#xff0c;获取ID&#xff0c;通过IIC协议获取寄存器的值&#xff0c;至于高级滤波算法&#xff0c;比如卡尔曼滤波&#xff0c;或者上面的&#xff0c;后面再更新基本配置最好选择PA0和PA1&#xff0c;5V开漏然后给上代码MPU6050.c#incl…

spring-ai agent概念

目录agent 概念理解记忆能力工具计划agent 概念理解 agent 智能体&#xff0c;突出智能 大模型的感觉 告诉你怎么做&#xff08;也不一定正确&#xff09;不会帮你做 Agent的感觉 直接准确的帮你做完&#xff08;比如&#xff0c;告诉 AI Agent 帮忙下单一份外卖&#xff0c…

NO.4数据结构数组和矩阵|一维数组|二维数组|对称矩阵|三角矩阵|三对角矩阵|稀疏矩阵

数组的储存 【定义】 数组&#xff1a; 由 n&#xff08;≥1&#xff09; 个相同类型的数据元素构成的有限序列&#xff0c; 是线性表的推广。 一旦被定义&#xff0c; 维数和长度就不可再改变&#xff0c; 一般对其只有元素的存取和修改操作。 一维数组 Arr[a0,…,an−1] Arr[…