当前位置: 首页 > Web前端 > vue.js

摸摸手,求你用Proxy处理跨域

时间:2023-04-01 13:07:43 vue.js

首先,前后端分离开发应该会遇到跨域问题。上周加入的新朋友不熟悉,所以就写了。自己复习一下。1.什么是从来源'http://localhost:8080'跨域访问'https://XXX.com'的XMLHttpRequest已被CORS策略阻止:没有'Access-Control-Allow-Origin'标头出现在请求的资源上。当你发现请求不可用,然后打开控制台,发现这句话,那么,嗯,跨域2.为什么要跨域,跨域,顾名思义就是跨域。他原来的区域就是上面说的,你是一个http://localhost:8080的URL,但是你请求的是https://XXX.com。浏览器阻止此请求。告诉你,那是行不通的。至于为什么不行,是因为浏览器有同源策略。所以:知识点1.只有浏览器才有跨域问题。知识点2,这个请求很大程度没有发出去,所以后端没有收到任何东西。3.跨域处理的方法有很多,这里不做详细展开(这是一道经典的面试题),其中一种是使用Proxy4,Proxy来讲解Proxy中间件,它实际上起到了代理的作用.你可以这样理解,当你发送一个请求的时候,被Proxy拦截了,他把你的请求按照你的配置,转发到真实的地址,返回之后,他再把结果返回给你。本质上是在本地设置一个节点服务,作为请求的转发代理。所以:知识点:proxy只在开发环境下使用(这句话其实是错误的,proxy可以在任何环境下使用,但是在实际工作和生产中,基本上只有开发环境才会有跨域,因为你的IP是和后端不同)5.如何使用Proxy目前,基本都是通过新版的vue-cli配置http-proxy-middleware来寻找vue.config.js文件(我没找到新的,与package.json同级)//vue.config.jsmodule.exports={devServer:{proxy:'http://localhost:4000'}}配置完成后,请重启服务,否则不会生效现在,我们所有的请求(不包括请求图片之类的)实际上都会请求到localhost:4000之前的版本,在config/index.js`dev:{assetsSubDirectory:'static',assetsPublicPath:'/',proxyTable:{'/api':{target:"http://localhost:4000",changeOrigin:true,}},`这里我们访问/api,实际上访问的是http://localhost:4000另外,其他常用的参数还有ws,pathRewritews表示转发websocketpathRewrite表示是否重新更改路径下面的例子module.exports={devServer:{proxy:{'/api':{target:'http://localhost:4000',ws:true,//proxychangeOrigin:trueforwebsocket,pathRewrite:{'^/api/old-path':'/api/new-path',//这个会把/api/old-path,//改成http://localhost:4000/api/new-path//(应该很少用,一般一致)}}}}}最后一个知识点:记得那个效果项目重启后才能看到。这时候大家打开控制台一看,并没有什么变化。他是在控制台说他看到的请求发送后被代理转发的,所以成功的控制台链接不会改变。