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

一.什么是跨域问题

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都在同一模块下,请求地址满足前面说到的协议 端口 域名三者全都相同,所以不会出现跨域问题。

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值