跳到主内容

vue跨域请求配置,跨域代理

· 2分钟阅读

vue-cli创建项目后,使用 axios 请求后端接口,需要请求后端接口时,报了跨域的问题,具体错误如下

Access to XMLHttpRequest at 'http://localhost:3000/getData'
from origin 'http://localhost:3000' has been blocked by CORS policy:
Request header field access-control-allow-origin is not allowed
by Access-Control-Allow-Headers in preflight response.

看到这个错误时候一脸懵逼,无从下手,后面查阅了一下,发现这个错误是因为 vue-cli 需要配置跨域代理,配置如下

我们先找到 vue.config.js 或者 webpack.config.js 文件

找到 devServer 配置项,新增 proxy 代理

devServer: {
open: true,
host: "localhost",
port: 3000,
https: false,
proxy: {
'/api': {
target: "https://abc.com/",
changeOrigin: true,
pathRewrite:{
'^/api':'/'
}
}
}
}

changeOrigin 配置

默认情况下,代理时会保留主机头的来源,可以将 changeOrigin 设置为 true 以覆盖此行为。

pathRewrite 配置

pathRewrite用来改写请求路径,上面的配置意思是,当请求 localhost:3000/api/getData ,会把 api 移除掉,然后把 getData 拼接到 https://abc.com/getData

所以请求 localhost:3000/api/getData ,会转发到 https://abc.com/getData 这个接口上

总结

开发不仅可以通过 proxy 来设置代理,也可以通过服务端配置 access-control-allow-origin: * 来实现,这样前端就不需要配置 proxy 代理了