“这是我参与更文挑战的第2天,活动详情查看: 更文挑战”
前提:
用户在localhost: 300的页面请求localhost: 5000的接口 结果: 由于ajax同源限制的原因 , 会发生跨域请求 解决方法 : 代理 代理的原理是 :
代理服务器是开在3000端口的 , 因为如果是 开5000端口的话, 那么照样会发生跨域 ,
所以是开在3000端口的, 因此我们在发起axios请求的时候地址也是3000的 , 当代理收到这个请求的时候会给他转发到 目标服务器上面 ,
问题为什么代理服务器可以转发 不会发生跨域吗 ?答案是不会 , 因为代理服务器避开使用ajax的, 因此不会有同源策略的限制 。
可以看到这儿要使用3000的端口
方法1:
在package.json中设置 “proxy: "代理的地址 ”http://localhost:5000“,
缺点是 : 只能配置一个目标服务器, 当有多个目标服务器的时候我们应该如何限制呢 ? 那就使用方法2了 。
方法2:
在package.jso
同级目录中新建一个setupProxy.js
内容是:
其中changeOrgin:如果是true的话, 那么目标服务器的 request.get('Host') , 就会是5000(就是代理中发送的host地址), 如果是false那么 就会是3000(本机直接发送的 ), 当后台做了限制的时候, 可能请求就不能发成功了 , 所以我们一般写的是 true
pathRewrite: 就是重写路径 , 比如我们目标接口http://localhost:5000/students,
因为需要配置代理 ,所以我们请求的时候会在前面加上 /api1,
因为还是先从代理上请求的 , 所以我们写的请求地址是http://localhost:3000/api1/students , 当遇到api1的时候需要代理到5000服务器上 , 如果不重写路径那我们最后的请求路径就变成了 http://localhost:5000/api1/students
服务器找不到这个资源, 会发生报错的 因此需要路径重写
最后需要注意的是: 代理服务器会先从localhost 3000来请求资源 , 如果找不到的花才会发生转发 到5000服务器