关于vue中webpack配置跨域方法

本文介绍如何在vue.config.js中设置代理,实现不同环境下的HTTP请求管理,避免404错误。通过axios封装,根据环境变量替换API前缀,确保正确调用目标服务器。同时,讲解了跨域配置与静态资源代理的注意事项。

在vue.config.js中,利用proxy去进行配置在这里插入图片描述
并且可以根据http请求接口不同去配置多种代理,需要注意的是,在封装的axios请求中,http要根据环境去replace掉前面的api,避免请求出现404的情况,target为目标代理服务器地址,changeOrigin:true为允许跨域,pathRewrite为代理,但是你得告诉它以什么开头才走代理,不然可能像html,css,js这些静态资源都可能跑去代理,由于你请求的接口没有/api ,所以你要把他制空

### 配置 Webpack 解决 Vue2 双问题 在 Vue 2 项目中,如果前端应用部署在 `http://a.example.com`,而后端服务位于 `http://b.example.com`,则会遇到浏览器的同源策略限制。为了在开发环境中解决这一问题,可以通过配置 Webpack 的 `devServer.proxy` 来实现请求代理,从而绕过限制[^1]。 #### 开发环境下的代理配置 Vue CLI 使用 `webpack-dev-server` 提供本地开发服务器,并支持通过 `proxy` 设置将特定路径的请求代理到目标服务器。这种机制使得前端在开发过程中可以像访问本地资源一样访问远程服务,而不会受到同源策略的影响[^3]。 以下是一个典型的 `vue.config.js` 配置示例: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://b.example.com', // 要代理的目标服务器地址 changeOrigin: true, // 是否更改请求头中的 origin 字段为目标服务器地址 pathRewrite: { '^/api': '' // 请求路径重写,去掉前缀 } }, '/auth': { target: 'http://another.example.com', // 第二个目标服务器 changeOrigin: true, pathRewrite: { '^/auth': '' } } } } } ``` 上述配置表示: - 所有以 `/api` 开头的请求都会被代理到 `http://b.example.com`。 - 所有以 `/auth` 开头的请求会被代理到 `http://another.example.com`。 这样即使后端 API 分布在不同的名下,也可以通过多个代理规则来处理,确保开发阶段能够顺利进行测试和调试[^2]。 #### 前端代码中的使用方式 在 Vue 应用中调用接口时,只需按照代理路径发起请求即可,例如: ```javascript import axios from 'axios' // 请求 http://b.example.com/user/profile axios.get('/api/user/profile').then(response => { console.log(response.data) }) // 请求 http://another.example.com/login axios.get('/auth/login').then(response => { console.log(response.data) }) ``` 由于代理是在开发服务器上完成的,因此浏览器看到的请求来源仍然是 `localhost:8080`(默认端口),从而避免了问题。 #### 生产环境建议方案 虽然 `devServer.proxy` 在开发阶段非常有用,但它仅适用于本地开发环境,在生产部署中无法直接使用。对于生产环境,推荐采用以下几种方式之一来解决问题: 1. **Nginx 反向代理** 将所有后端请求通过 Nginx 统一代理到对应的后端服务,使得前端页面与后端接口看起来“同源”。这种方式不仅解决了问题,还能提高性能并增强安全性。 2. **CORS 配置** 后端服务应在响应头中添加适当的 CORS 相关字段,如 `Access-Control-Allow-Origin`、`Access-Control-Allow-Credentials` 等,以允许来自指定名的请求。 3. **JSONP(仅限 GET 请求)** JSONP 是一种传统的解决方案,利用 `<script>` 标签不受同源策略限制的特点来获取数据。不过该方法只适用于 GET 请求,并且存在一定的安全风险,不建议用于敏感操作。 #### 携带 Cookie 的请求注意事项 如果需要在请求中携带 Cookie,则必须同时满足以下条件: - 后端响应头中包含 `Access-Control-Allow-Credentials: true`。 - 前端请求设置 `withCredentials: true`。 例如,在 Axios 中可如下配置: ```javascript axios.get('/api/user/profile', { withCredentials: true }) ``` 此外,`Access-Control-Allow-Origin` 不能设置为通配符 `*`,而应明确指定允许访问的源地址。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值