vue proxy 设置接口代理后,get请求正常,post请求报403,解决方案

跑了一个老项目(其实也不是很老,大约1年多以前的),技术栈是 vue2+element+mock+nginx

sorry?nginx?

什么鬼,细看 README ,原来是以 vue-element-admin 为基础开发的微服务开发平台的管理系统,又是微服务,最近一段时间这个词的出现频率较高啊,有点头大,暂时先不管,代码撸起来。

刚开始跑起来,登录,登录名校验,接口挂了,看代码,检查发现, vue.config.js 文件里的代理 target 属性设置错误,重写到了本地,也就是 localhost ,改一下,ok,搞定,再跑,登录提交挂了,是一个 post 接口,报错状态码 403 Forbidden ,显示 Invalid CORS request ,表面一看,是跨域了,不知所以,照例,百度走起。。

网上搜了一下,大部分人指向一个地方: onProxyReq ,有文章直接发出来 git 上的一个链接,貌似有解决方案,链接如下 :https://github.com/facebook/create-react-app/issues/5441

主要是需要设置这个东西:

onProxyReq(proxyReq) {
  if (proxyReq.getHeader("origin")) {
    proxyReq.setHeader("origin", target)

设置的地方就是pathRewrite同级的地方,target就是你需要代理的服务地址,同属性里的target,下面来简单介绍下onProxyReq以及onProxyRes

dev-serverproxy有两个事件onProxyReqonProxyRes,可以在请求发送前和响应后对请求内容进行更改。

onProxyReq的第一个参数proxyReqnode http.ClientRequest的实例,后两个参数reqres分别是Express框架封装的Request对象和Response对象。

onProxyRes的第一个参数proxyRes则是 node http.IncomingMessage的实例,内置的方法及属性都有所不同。

看起来,这两个方法是两个事件拦截器,一个请求,一个相应,我试着在onProxyReq里打log输出,但是实际跑起来,即使接口成功调用了,log信息也没有出来,网上也有很多人遇到这个问题,有了解的大神可以说下这其中的原理。

好了,前期铺垫就这么多,我按照git里的那个方法设置了后,然并卵,报错依旧,昨天晚上搞了几个小时,还是没搞定,今天早上来了继续搞。

后又在网上看到一篇文章,也是设置onProxyReq,如下:

onProxyReq(proxyReq){
  proxyReq.removeHeader('origin') 

文章地址:https://www.cnblogs.com/sweeeper/p/11132455.html

再跑,ok,接口全部调用成功,这里是删除了origin,有大神知道这是怎么回事吗?两种方式有什么区别?

另外,网上还有一篇关于解决403报错的文章,也许对大家有帮助,地址:https://www.cnblogs.com/midworld/p/10996850.html

谢谢。

分类:
前端
  •