在开发过程中,为了方便前后端联调,通常会在vue.config.js中配置devServer。而在devServer中配置proxy属性,可以将指向本地的请求
(例如:http://localhost:80/prod_api/action)代理到后端的开发服务地址上(例如:http://localhost:81/action)
这里简单说一下正向代理
代理服务器代替客户端像服务器发起请求,隐藏了客户端。
发起请求:代理服务器接收从客户端发出的请求,转而向目标服务器发起请求。
响应数据:目标服务器响应请求给代理服务器接收,代理服务器接受请求后,响应给客户端。
vue.config.js中
devServer: {
//接口代理
proxy: {
'/prod_api': {
target: `http://localhost:81`,// 后端服务器地址
changeOrigin: true,// 是否改变Origin头信息,是否允许跨域
pathRewrite: {//对路径匹配到的字符串重写
['^' + '/prod_api']: ''
// 替换前缀'/prod_api',即:请求到 http://localhost:80/prod_api/xxx,现在会被代理到请求 http://localhost:81/xxx。
// 例如 /prod_api/user 现在会被代理到请求 http://localhost:81/user
}
}
}
}
当浏览器发起一个请求 http://localhost:80/prod_api/login ,前端拿着配置项的那个 /prod_api 地址去匹配请求中的地址,如果请求的地址中包含
配置项的地址 /prod_api ,则匹配成功。匹配成功后,会将匹配到的地址及其后面的地址拼到target的后面,
也就是变成 http://localhost:81/prod_api/login ,通过这个地址向后端发起请求,
但是这时候后端的地址中可能不包含 /prod_api ,那就需要 pathRewrite这个属性来将请求url中的 /prod_api 替换成 ''
流程如下:
1、浏览器发起请求 http://localhost:80/prod_api/login
2、和配置项匹配成功后,将 /prod_api/login 拼接到target的后面
3、现在,对 /prod_api/login 的请求会将请求代理到 http://localhost:81/prod_api/login
4、如果后端接口中不包含 /prod_api,不希望传递 /prod_api,则需要重写请求路径 将浏览器发起的请求的请求URL中的 “/prod_api” 替换为 “”
5、此时对 http://localhost:80/prod_api/login 的请求,前端会将请求代理到 http://localhost:81/login