跨域的意义

 

目前知道,跨域有三种解决办法,

第一jsonp,这个感觉很麻烦,不学。

第二,cros,这个主要是后端服务器开始accessControlAllow origin,它开启几个不同源的http地址,那么那几个地址就可以跨域请求自己网站的数据了。

第三:前端使用webpack代理,如果是这样的化,那浏览器跨域岂不是毫无意义,因为我可以使用webpack完全代理,想请求谁就把自己的源伪装成谁。

但是,webpack是一个打包工具,你在测开发的时候,可以使用webpack-dev-server去代理,但是生产环境肯定就没法用了,所以生产环境还是cros,让后端去解决去开放前端服务器的地址;

但是如果调用的是别的公司的api,那不可能是别的公司的后端去帮你修改cros吧。

所以使用nginx,反向代理我们的前端服务器,让它同源发送请求到后端服务器;或者反向代理我们的后端服务器让他和前端页面所在服务器同源;

 https://blog.csdn.net/BiYvGe/article/details/122495773

 https://zhuanlan.zhihu.com/p/372207003

 

 

二、webpack的devserver的proxy

2.1代理解决跨域的原理

我们开启了webpack的devServer,如果某个url通过正则被web服务器捕获到到,那么这个url就会访问我们的web服务器,然后web服务器代理我们的真实服务器去访问targetr服务器,再将结果返回; 

https://blog.csdn.net/weixin_43706224/article/details/126379448

对devserver的proxy解释的非常好

 

1.浏览器是同源的,但是服务器不是同源的。
所以我们可以通过devserver开启一个web服务器,然后这个web服务器的Access-Control-Allow-Origin设置为*,那么浏览器向这个web服务器请求资源就不受跨域限制了。

然后我们配置的proxy{url:***, port:4000},
web服务器将会去向真正的后端服务器(端口号4000)请求资源,服务器之间是没有同源策略这一说的,然后web服务器请求到资源后再返回给浏览器请求即可。

 

 

那么智运网门户项目,为什么不产生跨域问题?

我觉得应该是后端服务器的Access-Control-Allow-Origin做了设置,所以各种xhr的请求不需要经过web服务器代理转发,直接发送到后端服务器即可,并且不会产生跨域。
不信的话,我们可以直接在浏览器url中输入126:13220这个url,看看会不会有跨域限制,如果没有,那肯定是后端不限制了。

 

2.2什么样的请求才会被proxy代理?

axios(http:192.168.12.126:13220)这个url,这种形式的应该不会经过代理,
那么什么形式的网络请求会经过axios?

https://blog.csdn.net/Liu_yunzhao/article/details/90520028

这篇文章讲的很好,到底什么样的请求才会被代理。
所以说,axios(http:192.168.12.126:13220)这种形式会不会被代理,要看后面的path是否符合proxy的路径,如果符合就会被代理。

 

 

 

 

 

参考:

 

 

 

posted @ 2022-09-06 16:50  Eric-Shen  阅读(73)  评论(0编辑  收藏  举报