其他分享
首页 > 其他分享> > 用项目举例说明什么是是跨域访问

用项目举例说明什么是是跨域访问

作者:互联网

一.什么是跨域问题

1. 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。最简单的说就是从当前域名的网站下不能请求非同源的地址

所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。

请特别注意:跨域问题是针对于浏览器的,因为需要解决的跨域问题,是浏览器施加的安全限制所造成的。

2. 跨域是指跨域名的访问,有三种情况:

3. 举例说明:

http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)

http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

4. 跨域会阻止什么操作?

浏览器是从两个方面去做这个同源策略的

一是:针对接口的请求 

二是:针对Dom的查询

这点就能够很好的防止别人把你经常访问的网页嵌入到iframe中来获取你的个人信息,比如a页面中嵌入了iframe,src为不同源的b页面,则在a中无法操作b中的dom,也没有办法改变b中dom中的css样式。

而如果ab是同源的话是可以获取并操作的。

 

以上参考:

https://blog.csdn.net/lianzhang861/article/details/84871369

https://www.sohu.com/a/417033446_455717

 

二.为什么原来在做项目中没有遇到跨域问题呢?

在非微服务的项目架构中,前端的web层和后端controller一般放在一个模块中,如在我使用Dubbo搭建的一个RPC项目中:

这里controller层和web层在同一个模块下:                            

health_backend模块的端口号是82:           

 

       

health_service_provider是用Dubbo搭建来提供服务的,端口号为81:

这里的业务逻辑是 web层请求controller层的方法,controller层请求另一个模块中的方法,这时也发生了跨域问题,但是需要解决跨域问题的场景是浏览器只允许同源访问,即:访问同源的资源是被浏览器允许的,但是如果访问不同源的资源,浏览器默认是不允许的。访问不同源的资源那就是我们所说的跨域。所以这里的RPC在后台是不需要考虑跨域问题的,而对于前端和后端完全分离,比如微服务架构中,前端和后端放在不同模块,不满足同源策略,这时候就需要考虑跨域问题。

针对上面的问题,再看下前端抓包的结果:

前端axios的请求:

前端请求的地址:

这时因为web层和Controller都在同一模块下,请求地址满足前面说到的协议 端口 域名三者全都相同,所以不会出现跨域问题。

 

 

标签:http,跨域,www.123,访问,域名,浏览器,com,举例说明
来源: https://blog.csdn.net/qq_39552268/article/details/116274094