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

前端vue框架实现反向代理详解

目录

简介

Vue2与Vue3跨域解决方案(反向代理实现)

跨域问题本质

Vue2实现方案(基于vue-cli)

Vue3实现方案(基于Vite)

前端请求示例

工作原理图解

常见问题解决

总结方案对比


简介

在日常前端开发中,我们总会遇到 Access to XMLHttpRequest at *** from origin 的报错,这种情况就是跨域造成的,在项目中如果需要我们前端解决跨域怎么解决跨域呢?接下来给大家介绍一下代理。

Vue2与Vue3跨域解决方案(反向代理实现)

跨域问题本质

浏览器同源策略限制导致:当前端域名(如localhost:8080)请求后端接口(如api.example.com)时触发跨域错误。解决方案核心是通过代理服务器中转请求。


Vue2实现方案(基于vue-cli)

vue.config.js中配置代理:

module.exports = {devServer: {host: "0.0.0.0", // 允许外部ip访问port: 8080, // 自定义修改8080端口https: false, // 启用httpsopen: false, //build自动打开浏览器proxy: {// 代理规则1:匹配/api开头的请求'/api': {target: 'http://192.168.1.20', // 目标服务器地址changeOrigin: true,               // 开启虚拟主机pathRewrite: {'^/api': ''                     // 重写路径:移除/api前缀}},// 代理规则2:匹配/static开头的请求'/static': {target: '...', // 配置你需要代理的地址changeOrigin: true}}}
}

代码解释

  1. 当请求/api/user时 → 转发到http://192.168.1.20/user
  2. changeOrigin: true 修改请求头Host为目标地址
  3. 开发环境生效,生产环境需Nginx配置

Vue3实现方案(基于Vite)

vite.config.js中配置代理:

export default defineConfig({server: {proxy: {// 代理规则'/api': {target: 'http://192.168.1.20', changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '') // 路径重写}}}
})

关键差异

  1. Vite使用server.proxy而非devServer.proxy
  2. 路径重写改用rewrite函数
  3. 支持WebSocket代理(自动启用)

前端请求示例

无论Vue2/Vue3,前端请求方式一致:

// 使用axios示例
import axios from 'axios';// 本地请求路径(将被代理)
const fetchData = async () => {try {// 请求 /api/data → 代理到目标服务器/dataconst res = await axios.get('/api/data'); console.log(res.data);} catch (err) {console.error('请求失败', err);}
}


工作原理图解

浏览器请求
localhost:8080/api/data│▼
Vue开发服务器(代理)│▼ 转发请求
目标服务器
your-backend.com/data│▼ 返回响应
Vue开发服务器│▼ 返回浏览器
浏览器接收数据


常见问题解决

  1. 404错误

    • 检查target地址是否正确
    • 确认后端服务是否运行
    • 使用curl http://your-backend.com/data测试接口
  2. 代理未生效

    • Vue2:确认配置文件名为vue.config.js
    • Vue3:确认在vite.config.js中配置
    • 重启开发服务器
  3. 生产环境部署

    # Nginx配置示例
    location /api/ {proxy_pass http://your-backend.com/;proxy_set_header Host $host;
    }
    


总结方案对比

特性Vue2 (Webpack)Vue3 (Vite)
配置文件vue.config.jsvite.config.js
代理配置项devServer.proxyserver.proxy
热更新速度较慢极快
路径重写pathRewrite对象rewrite函数

注意:代理仅在开发环境生效,生产环境需通过Nginx或云服务配置代理。

http://www.dtcms.com/a/356679.html

相关文章:

  • 【网弧软著正版】2025最强软著材料AI生成系统,基于GPT5.0
  • 华硕主板 BIOS 提示——GPT header corruption has been detected
  • 港科大开放世界长时域具身导航!LOVON:足式机器人开放词汇目标导航
  • 数据结构 02(线性:顺序表)
  • 第四章 Vue3 + Three.js 实战:GLTF 模型加载与交互完整方案
  • Go初级之五:结构体与方法
  • 二手奢侈品拍照估价上门快递回收小程序开发
  • 前端如何使用canvas实现截图
  • 【前端教程】从零开始学JavaScript交互:7个经典事件处理案例解析
  • 嵌入式Linux驱动开发 - DTS LED驱动
  • 拼多多商品信息批量获取及开放API接口调用指南
  • 【面试场景题】dubbo可以使用自定义的序列化协议吗
  • 音视频学习(五十九):H264中的SPS
  • Kubernetes: 解构Karpenter NodePool, 云原生时代的弹性节点管理艺术
  • 【K8s】整体认识K8s之集群的pod之间的通信
  • LSM6DS3姿态芯片和LIS2MD磁力计芯片数据读取(stm32)
  • 千年智造,一触即发 耐达讯自动化Profibus集线器如何让HMI触摸屏在工业4.0中“点石成金“?
  • 嵌入式Linux驱动开发 - 并发控制机制
  • 【视频讲解】R语言海七鳃鳗性别比分析:JAGS贝叶斯分层逻辑回归MCMC采样模型应用
  • 嵌入式Linux驱动开发 - 新字符设备LED驱动
  • Go Vendor 和 Go Modules:管理和扩展依赖的最佳实践
  • Redis vs Elasticsearch:核心区别深度解析
  • Vue 项目首屏加载速度优化
  • Mysql系列--11、使用c/c++访问mysql服务
  • ViennaCL并行异构库介绍和使用
  • Pinterest自动化 “Pin“得高效
  • SpringMvc下
  • Oracle SQL 性能调优的基石:深入解读与驾驭执行计划
  • 商家协同生态下的复购革命:跨店收益如何激活12%增量消费
  • 【新启航】3D 逆向抄数的工具技术与核心能力:基于点云处理的扫描设备操作及模型重建方法论