Javascript篇-Vue 项目如何配置 Proxy解决跨域

在现代前端开发中,很多时候我们需要与后端服务器进行交互。尤其是在开发过程中,前后端分离,前端运行在开发服务器(如 localhost:8080localhost:5173),而后端 API 服务可能运行在不同的端口(例如 localhost:8090)。这时就会出现跨域问题。为了解决这一问题,前端开发服务器通常会配置代理(proxy)来绕过跨域限制。

什么是跨域 假设有两个网站:

  • https://example1.com(A 网站) https://example2.com(B 网站)

A 网站 上,你的网页中有一个 JavaScript 脚本,试图访问 B 网站 上的资源(比如一个 API),这就是跨域请求。

在本篇文章中,我们将介绍如何在 Vue 项目中配置代理,以及代理的工作原理,最后给出 Vue 和 Vite 的具体配置实例。

1. 代理(Proxy)的工作原理

代理的工作原理是:当开发环境中,前端发送请求到一个不同的域名或端口时,浏览器会因同源策略(CORS)而拒绝该请求。为了绕过这种限制,前端开发服务器可以通过代理来转发请求。

  • 当你发送请求到指定的 URL(例如 http://localhost:5173/api/user)时,前端开发服务器将请求转发到目标服务器(例如 http://localhost:8090/api/user)。
  • 目标服务器接收请求并返回响应,前端开发服务器再将响应返回给客户端。这样,浏览器只会看到与前端开发服务器交互,从而避免了跨域问题。

2. 说在前面(npm run dev运行说明)

当你执行 npm run dev 时,通常会执行项目中的 package.json 文件的 scripts 部分的 dev 命令。这个命令的实际内容通常是启动一个Web开发服务器,监听本地的端口,比如Vite是3000或者5173;Webpack是8080。(也就是类似后端服务器,可以接收http请求)。

我们通过axios也就是XMLHttpRequest 或者 Fetch请求后台数据时,为了避免跨域,不能直接使用后台的url(localhost:8090/api/user)来发送请求,而必须使用Vite或者Webpack创建的这个Web服务器的url(localhost:3000/api/user)。这时就需要Vite或者vue提供的代理来将这个localhost:3000/api/user 这个转发到 后端的localhost:8090/api/user ,从而解决跨域这个问题。

所以开发环境下,axios实际配置的baseUrl 应该是localhost:3000 或者 '/' 默认就是当前Web服务器地址。下文中代理的地址配置成实际的后端的接口url。

3. Vue 项目中如何配置 Proxy

Vue 项目可以通过 vue.config.js 配置文件来设置代理。在该文件中,我们可以使用 devServer.proxy 来设置代理规则。

示例:Vue 2 项目配置 Proxy

首先,需要在项目根目录创建或修改 vue.config.js 文件:

// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8090',  // 目标服务器的地址
        changeOrigin: true,               // 如果是跨域请求,设置为 true
        pathRewrite: {                    // 重写路径
          '^/api': ''                     // 将请求路径中的 `/api` 去掉
        },
        secure: false,                    // 如果目标服务器使用了 HTTPS,并且是自签名证书,设置为 false
      },
    },
  },
};
配置说明:
  • target: 目标 API 服务器的地址,即后端接口的地址。
  • changeOrigin: 是否更改请求头中的 Origin 字段为目标服务器的地址,一般设置为 true
  • pathRewrite: 路径重写,'^/api': '' 表示将请求路径中的 /api 去掉,再发送到后端 API。
  • secure: 如果目标是 HTTPS 并且使用了自签名证书,设置为 false
示例:Vue 3 项目配置 Proxy(Vite)

对于 Vue 3 项目,通常使用 Vite 作为构建工具。Vite 配置代理的方式不同于 Vue CLI,需要在 vite.config.tsvite.config.js 中设置。

// vite.config.ts
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';

export default defineConfig({
  plugins: [vue()],
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8090',  // 目标服务器的地址
        changeOrigin: true,               // 修改请求头中的 Origin 字段
        rewrite: (path) => path.replace(/^\/api/, ''),  // 重写路径
      },
    },
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'), // 配置路径别名
    },
  },
});
配置说明:
  • proxy: 配置代理规则与 Vue 项目类似。
  • rewrite: 将路径中的 /api 替换为空字符串,使得请求发送到目标 API。

4. 总结

通过配置代理,前端开发过程中就可以轻松避免跨域问题。代理服务器会接收前端请求,并将请求转发到目标后端 API。代理的配置方法因工具而异,Vue CLI 和 Vite 都提供了简单的方式来进行配置。在 Vue 3 使用 Vite 时,可以通过 vite.config.ts 配置代理规则,而在 Vue 2 项目中则需要使用 vue.config.js 来设置代理。

相关配置总结:
  • Vue 2: 通过 vue.config.js 中的 devServer.proxy 来设置代理。
  • Vue 3 (Vite): 通过 vite.config.ts 中的 server.proxy 来设置代理。

通过代理,前端请求就能够被顺利地转发到后端,避免了跨域问题,并简化了接口路径的管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值