什么是跨域?
跨域是指一个域下的文档或脚本试图去请求另一个域下资源的,这里跨域是广义的。
广义的跨域:
1.)资源跳转:A链接、重定向、表单提交;
2.)资源嵌入:<link>、<script>、<img>、<frame>等dom标签,还有样式中的background:url()、@font-face()等文件外链;
3.)脚本请求:js发起的ajax请求、dom和js对象的跨域操作等。
其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。
什么是同源策略?
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的功能,
如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的
域名指向同一个IP地址,也非同源。
同源策略限制以下几种行为:
1.)Cookie、LocalStorage和IndexDB 无法读取
2.)DOM和JS对象无法获得
3.)AJAX 请求不能发送
常见跨域场景:
URL 说明 是否允许通信
http://www.domain.com/a.js
http://www.domain.com/b.js 同一域名,不同文件或路径 允许
http://www.domain.com/lab/c.js
http://www.doamin.com:8000/a.js
http://www.doamin.com/b.js 同一域名,不同端口 不允许
http://www.domain.com/a.js
https://www.domain.com/b.js 同一域名,不同协议 不允许
http://www.domain.com/a.js
http://192.168.4.12/b.js 域名和域名对应相同ip 不允许
http://www.domain.com/a.js
http://x.domain.com/b.js 主域相同,子域不同 不允许
http://domain.com/c.js
http://www.domain1.com/a.js
http://www.domain2.com/b.js 不同域名 不允许