Vue项目devServer.proxy配置请求流程梳理

在开发过程中,为了方便前后端联调,通常会在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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容