vue3中的配置代理

本文详细介绍了跨域的概念、原因及解决方法,重点讲解了在Vue项目中通过配置代理来解决跨域问题。文章通过实例展示了在express后端启用CORS以及在vue.config.js中配置代理的过程,强调了配置代理仅适用于开发环境。同时,讨论了生产环境下的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 如图,配置代理就是在客户端与服务器中充当中介的角色

目录

关于配置代理,首先我们的要知道为什么要配置代理,配置代理做了什么事情

一、跨域是什么

二、如何解决

三、配置代理案例

       1. 下面是我自己在后端尝试解决跨域的例子

2.然后在vue中解决跨域是在vue-cli中的 vue.config.js中配置代理,


关于配置代理,首先我们的要知道为什么要配置代理,配置代理做了什么事情

        1.首先,为什么要配置代理。 大家应该都写过axios请求吧,当我们向后台服务器发送axios请求的时候,有时候会在浏览器中报错这样一段话

 这就是由于我们发送的请求跨域了, 跨域并不是 就 请求发不出去 或  服务器的响应接受不到,而是 由于 浏览器 服务器发送的请求 跨域了,导致 浏览器在接受到服务器的响应数据后拦截了下来,不给你。

        所以 简单点说 , 配置代理就是为了让浏览器接受到服务器的数据后发送给我们。

同源策略分为以下两种:

  1. DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里主要场景是 iframe 跨域的情况,不同域名的 iframe 是限制互相访问的。
  2. XMLHttpRequest 同源策略:禁止使用 XHR 对象向不同源的服务器地址发起 HTTP 请求。       

关于详细的大家可以看  什么是同源策略? - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/66047383

        2.配置代理做了什么。配置代理就是找一台代理服务器,在你发送请求的时候做一个中介,浏览器先将请求发送给代理服务器,代理服务器再将请求转发给后台的数据服务器。代理服务器 要和 你真正访问的 后台服务器是同源的。

关于跨域我给大家从vue的文档中截取的这么一段

一、跨域是什么

跨域本质是浏览器基于同源策略的一种安全手段

同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能

所谓同源(即指在同一个域)具有以下三个相同点

  • 协议相同(protocol)
  • 主机相同(host)
  • 端口相同(port)

反之非同源请求,也就是协议、端口、主机其中一项不相同的时候,这时候就会产生跨域

一定要注意跨域是浏览器的限制,你用抓包工具抓取接口数据,是可以看到接口已经把数据返回回来了,只是浏览器的限制,你获取不到数据。用postman请求接口能够请求到数据。这些再次印证了跨域是浏览器的限制

二、如何解决

解决跨域的方法有很多,下面列举了三种:

  • JSONP
  • CORS
  • Proxy

而在vue项目中,我们主要针对CORSProxy这两种方案进行展开

CORS 实现起来非常方便,只需要增加一些 HTTP 头,让服务器能声明允许的访问来源

只要后端实现了 CORS,就实现了跨域

所以 CORS  解决跨域是在后端解决的

三、配置代理案例

       1. 下面是我自己在后端尝试解决跨域的例子

从左边的窗口 ,我们可以看到 我们用express在nodejs环境下搭建了一个简单的服务器 ,并且没有使用cors中间件,解决跨域

所有 如下图所示,我们成功报错了

然后,我们在express搭建的服务器中,使用cors中间件,然后重启服务

 然后结果也是如我们所料,并没有报跨域的错误

 OK,到这里我们在服务端解决跨域问题就解决了

2.然后在vue中解决跨域是在vue-cli中的 vue.config.js中配置代理,

                注意!!! 在vue.config.js中配置代理只适用于开发环境,如果大家把项目进行打包后,devServer就没有用了,该报错的还是会报错,但是 在打包后的生产环境中,我们还是有解决方法的

        

        如图,我们也是在服务器中重新注释掉了cors中间件,在vue.config.js中也没有配置代理。

         那我们也是如愿以偿再次报错。

然后,我们再在vue.config.js中配置proxy代理,添加了这段代代码,且在发送请求时,我们也要在请求的url上 携带上 /bpi 

"/bpi": { // 代理接口前缀为/bpi的请求
        "target": 'http://localhost:8080', // 对应的代理地址
        "secure": false, // 接受运行在https上,默认不接受
        "changeOrigin": true, // 如果设置为true,那么本地会虚拟一个服务器接收你的请求并代你发送该请求,这样就不会有跨域问题(只适合开发环境)
        "pathRewrite": { //重写路径 比如'/apis/aaa/ccc'重写为'/aaa/ccc'
          '^/bpi': ""
        }
      },

这样我们在开发环境下的配置代理就完成了

 

 在生产环境下的我就懒得写了,大家可以看下面的,里面有更好的解释

面试官:Vue项目中你是如何解决跨域的呢? | web前端面试 - 面试官系列 (vue3js.cn)https://vue3js.cn/interview/vue/cors.html#%E4%BA%8C%E3%80%81%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3

        

### Vue3 中使用 Vite 配置代理解决跨域问题 在 Vue3 项目中,如果遇到前后端分离导致的跨域问题,可以通过配置 `vite.config.js` 文件来设置反向代理。以下是详细的解决方案: #### 创建并编辑 `vite.config.js` 在项目的根目录下创建或编辑名为 `vite.config.js` 的文件,并按照以下方式配置代理选项。 ```javascript import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [vue()], server: { host: '0.0.0.0', port: 9999, proxy: { '/api': { target: 'http://xxx.xxxxx.xxx/', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') // 移除路径前缀 /api } } } }); ``` 上述代码实现了以下几个功能: - 设置服务器监听地址为 `0.0.0.0` 和端口为 `9999`[^1]。 - 使用 `proxy` 属性定义了一个 `/api` 路径的代理规则,其中: - **`target`**: 将所有以 `/api` 开头的请求转发至目标地址 `http://xxx.xxxxx.xxx/`[^2]。 - **`changeOrigin`**: 修改请求头部中的 Origin 字段为目标地址,从而让后端认为该请求来自同一域名。 - **`rewrite`**: 对原始 URL 进行重写操作,去掉 `/api` 前缀后再发送给目标服务器。 #### 测试代理效果 启动开发环境时,可以尝试访问类似如下接口: ```plaintext GET http://localhost:9999/api/example-endpoint ``` 实际请求会被代理到: ```plaintext GET http://xxx.xxxxx.xxx/example-endpoint ``` 通过这种方式,解决了浏览器因同源策略而产生的跨域限制问题。 --- ### 注意事项 - 如果后端 API 地址发生变化,请及时更新 `target` 参数对应的值。 - 当部署生产版本时,默认情况下不会应用这些代理规则,因此需要确保线上环境中已正确配置 CORS 或其他机制支持跨域通信。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值