一.什么是跨域?
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;
二.对于跨域有很多种的解决办法,首先给大家讲一个最最简单的办法
在后端的代码中,controller文件夹下文件中加
@CrossOrigin
例如
之后的一些在前端可能会有点麻烦噢
1.JSONP实现跨域
原理:jsonp实现跨域的原理是跨域的服务端把客户端所需要的数据放进客户端本地的一个js方法里,进行调用,客户端在本地的js对返回的数据进行处理。这样就实现了不同域名下的两个站点间的交流。
2.iframe+document.domain跨域
此方法的思想就是设置页面的document.domain把他们设置成相同的域名。
3.location.hash+iframe跨域
4.window.name+iframe跨域
原理就是window.name属性在于加载不同的页面(包括域名不同的情况下),如果name值没有修改,那么它将不会变化,并且这个值可以非常的长(2MB)
5.postMessage跨域
postMessage是HTML5引入的API。他可以解决多个窗口之间的通信(包括域名的不同)。
6.跨域资源共享(CORS)
其实对于跨域资源的请求,浏览器已经把我们的请求发放给了服务器,浏览器也接受到了服务器的响应,只是浏览器一看我们2个的域不一样就把消息给拦截了,不给我们显示。所以我们如果我们在服务器就告诉浏览器我这个数据是每个源都可以获取就可以了。这就是CORS跨域资源共享。7.NGINX代理跨域
· nginx配置解决iconfont跨域
· nginx反向代理接口跨域
实现思路:通过nginx配置一个代理服务器(域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域登录。
8.nodejs跨域
其实这种办法和上一种用nginx的方法是差不多的。都是你把请求发给一个中间人,由于中间人没有同源策略,他可以直接代理或者通过爬虫或者其他的手段得到想到的数据,然后返回(是不是和VPN的原理有点类似)。
9.webSocket跨域
webSocket大家应该都有所耳闻,主要是为了客服端和服务端进行全双工的通信。但是这种通信是可以进行跨端口的。所以说我们可以用这个漏洞来进行跨域数据的交互。