跨域问题及Vue项目中本地/线上解决方法核心总结

1做开发服务器代理

// 动态匹配规则:匹配所有以「环境变量API_KEY」为前缀的请求 process.env.VUE_APP_API_KEY: { // 1. 转发的目标后端服务器地址(真实接口所在的域名)

target: process.env.VUE_APP_BASE_URL, // 2. 跨域核心:伪装请求来源,让后端以为是同域请求 changeOrigin: true,

// 3. 路径重写:去掉请求路径中开头的API_KEY前缀,

pathRewrite: { \`\^${process.env.VUE_APP_API_KEY}\`: "", }, },

用开发服务器代理的方式去读env里的变量,

3不能在创建请求实例的时候用baseURL,去放env里的变量,因为直接放会跨域,那里需要用代理的开发服务器读取,env里的变量存的一般是目标服务器

2 代理流程

先给所有的请求配置了api

然后在config.js里设置了代理

4什么是跨域,怎莫解决跨域

跨域问题的核心是浏览器的同源策略,即协议、域名、端口三者不一致时,前端直接请求后端接口会被拦截,代理服务器是解决跨域的核心方案,核心原理是让代理服务器与前端项目地址同源,绕开浏览器的同源校验,再由代理服务器转发请求到真实后端接口(服务器间请求不受同源策略限制)。

代理服务器是解决前端跨域的核心方案,核心原理是让代理服务器地址与浏览器中前端项目地址保持同源,绕开浏览器同源策略拦截;前端先请求同源的代理服务器,再由代理服务器转发请求到真实后端接口(服务器间请求不受同源策略限制),以此实现跨域通信。

代理的配置分本地开发环境和生产部署环境,配置主体和方式完全不同:本地开发时,由前端自己在vue-cli/Vite中配置proxy本地代理,仅用于开发阶段;项目打包部署后,不再使用本地proxy,而是由后端/运维在Nginx/Apache等服务器上配置反向代理,该配置属于服务器层面操作,与前端代码无关,且前后端需提前协商确认代理的关键信息(接口前缀、真实后端地址等),避免配置错误导致请求失败。

生产环境配置服务器反向代理时,前端需将生产环境的接口相关信息告知后端/运维,同时要自行通过env环境文件配置不同环境的baseURL,实现开发和生产的请求基准地址区分,这里核心要明确几个关键概念和配置逻辑:

  1. baseURL并非接口基础路径,而是**目标服务器地址+接口基础路径(接口公共前缀)**的组合体,其中 /api 这类接口基础路径(也叫接口公共前缀)是固定不变的,仅用于标识接口、让代理精准捕获;

  2. 本地开发环境的baseURL,会直接拼接后端真实的服务器地址,适配前端本地proxy的转发规则;生产环境的baseURL则省略后端服务器地址,只保留 /api 这类基础路径,适配服务器端的反向代理规则;

  3. 所谓部署后baseURL的"基础路径变化",本质是baseURL是否拼接后端服务器地址的变化,而非 /api 这个基础路径本身改变,且该变化是前端在 .env.development (开发)和 .env.production (生产)文件中自行配置的,项目打包时会自动加载对应环境的baseURL,无需手动修改代码。

简单来说,开发和生产环境的baseURL配置变化,是前端为了匹配不同阶段的代理规则自行设置的,全程仅需前端将协商好的生产环境配置信息告知后端/运维,由对方完成服务器端反向代理配置即可,且接口基础路径( /api )全程固定,与assets静态资源的基础路径无任何关联,仅作用于接口请求环节。

5总结

跨域问题及Vue项目中本地/线上解决方法核心总结

跨域问题仅会在浏览器中出现,根源是浏览器的同源策略:浏览器地址由协议、域名、端口三部分组成,两个网址只要其中任意一部分不一致,就不满足同源策略,从A地址请求B地址的资源时,就会触发跨域问题。

一、Vue项目本地开发环境(本地):配置本地代理服务器解决跨域

本地开发时会启动本地代理服务器(dev server),该服务器与本地Vue项目的地址完全遵循同源策略,以此绕开浏览器的跨域拦截,核心实现逻辑:

  1. 给Vue项目中axios的所有请求地址统一添加请求前缀(如 /api );

  2. 在dev server的 proxy 中配置规则,拦截所有以该前缀开头的网络请求;

  3. 将拦截到的请求代理转发到真实的远端目标服务器,并把请求前缀重写为空串;

  4. 由本地代理服务器请求远端服务器的资源,再将结果返回给本地项目,实现跨域请求。

关键:dev server(本地代理服务器)运行在本地,和本地项目地址同源,因此不会触发跨域,要明确区分本地服务器(代理用)和远端服务器(真实请求目标)。

二、Vue项目线上生产环境(部署后):Nginx配置反向代理解决跨域

线上跨域的解决思路和本地完全一致,通过Nginx配置反向代理实现,核心逻辑与本地proxy代理一致:通过Nginx拦截指定前缀的请求,转发到真实后端服务器,本质也是利用中间层(Nginx)实现同源请求转发,规避浏览器跨域限制。

相关推荐
888CC++16 小时前
箭头函数(ES6)
前端·javascript·es6
qq_4198540516 小时前
css filter
前端·javascript·css
Agatha方艺璇16 小时前
VUE复习笔记
前端·vue.js
大家的林语冰16 小时前
npm 不忍了,正式上线“阶段式发布“的新功能,进一步对抗频繁的供应链攻击!
前端·javascript·node.js
by————组态16 小时前
Ricon组态技术架构 - 企业级Web组态解决方案
运维·服务器·前端·物联网·架构·组态·组态软件
llz_11217 小时前
web-第六次课后作业
前端·spring boot·后端
爱勇宝17 小时前
CEO通知5100名员工:今年不涨薪了,钱要投给AI!
前端·后端·程序员
乘风gg17 小时前
前端死到第几轮了?得物前端部门解散有感!
前端·ai编程·claude
艾伦野鸽ggg17 小时前
web 组大一下第二次考核
前端·css·html
水煮白菜王17 小时前
高德地图"未获得商用授权"水印临时移除方案
前端·javascript