首页 > 数据库 > 数据库开发技术 > 跨域访问好难搞!浏览器的“同源策略”你理解吗?!
在现实的开发中,我们经常会遇到页面需要请求另外的一个系统,也是面试时经常会碰到的一个问题,对于这种不是同一个系统下面的访问,我们该如何去做呢?
对于这个问题,平哥给大家解释下跨域的产生原因及解决办法。

一. 为什么会出现跨域?
在讲跨域问题如何解决之前,我们还是先来看看跨域问题是怎么产生的,这样知道了它的由来,我们就好对症下药了。
1. 同源策略
跨域问题的产生,其实是源自浏览器的“同源策略”。
1.1 同源策略的概念
所谓的“同源策略”,最早是由 Netscape公司提出的一个安全策略,后来这就成为了浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。
在同源策略中,要求 域名、协议、端口 3部分都要相同!!!
举例来说,http://:80/dir/syc. html,这个网址,http是协议,是域名,80是端口号(80端口号默认可以省略)。同源策略的具体规则如下表所示:

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
现在我们已经知道了跨域问题的由来,那又该如何解决呢?在前后端分离模式中,跨域问题可以分别由前端和后端两个团队来共同解决。
二. 前端解决方式
<script>标签是不受跨域影响,只要herf,src属性的标签都不收跨域的影响
利用JSONP
JSONP能实现的跨域的原理:
底层利用script实现,发送请求的传递callback的参数;
服务端可以到这个参数,给这个参数加上一个()然后直接返回给浏览器;
浏览器接收到返回的内容后就会解析成一个js的函数调用,前提先要定义这个函数。
三. 后端解决的方式
@CrossOrigin:在响应头中添加一个地址;
在SpringMVC的配置文件中进行配置。
<mvc:cors>
<mvc:mapping path="/**" allowed-origins="*"
allowed-methods="POST, GET, OPTIONS, DELETE, PUT,PATCH"
allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
allow-credentials="true"/>
</mvc:cors>当然,以上只是平哥给大家讲解的几种常见解决方案,其实在开发时还有其他解决思路,因为篇幅限制,平哥以后再跟大家讲解。
本月福利,关注公众号回复【福利】抢书咯!
今日份干货,学会的同学回复“666”!
精选第一名,可以领取办公鼠标垫一个哦!

点击【阅读原文】,零基础免费学Java!
原文作者:Java架构栈;如有侵权,请联系管理员删除。