标签:http 跨域 www.123 访问 域名 浏览器 com 举例说明
一.什么是跨域问题
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。