什么是跨域?
跨域:就是不同域之间进行相互资源请求;
例如:http://www.test.com/index.com 请求 http://www.test01.com/server.php
即进行不同的域名下的资源调用。
注意:域名对应的IP地址也算是跨域操作;例:127.0.0.1和localhost虽然对应,但在地址栏中算两个域。
为什么出现跨域?
浏览器在解析JavaScript出于安全方面的考虑,只允许在同域名下页面进行相互资源请求调用,不允许调用其他域名下的页面的对象;简单的理解就是因为JavaScript同源策略的限制。
注意:跨域并不是请求发不出去,请求能发出去,服务器能收到请求并正常返回结果,只是结果被浏览器拦截了,所以页面无法正常使用数据。
什么是同源策略?
同源策略要求同源相同才能进行正常的资源交互,即要求当前页面与调用资源的协议、域名、子域名、端口完全一致,不一致则就是跨域。
常见跨域场景
URL 说明 是否允许通信
http://www.demo.com/a.js
http://www.demo.com/b.js 同一域名,不同文件或路径 允许
http://www.demo.com/lab/c.js
http://www.demo.com:8000/a.js
http://www.demo.com/b.js 同一域名,不同端口 不允许
http://www.demo.com/a.js
https://www.demo.com/b.js 同一域名,不同协议 不允许
http://www.demo.com/a.js
http://127.0.0.1/b.js 域名和域名对应相同ip 不允许
http://www.demo.com/a.js
http://x.demo.com/b.js 主域相同,子域不同 不允许
http://demo.com/c.js
http://www.demo1.com/a.js
http://www.demo2.com/b.js 不同域名 不允许
解决方式
有很多 我这里就不多说了,我说一个最简单的就是在后台的控制层加上一个注解就完事了。
@CrossOrigin
如有问题 欢迎留言。。。。。。。。。。。。。。。