什么是跨域
跨域是只一个域下的文档或脚本试图请求另个一个域下的资源,这里的跨域是广义的。
广义的跨域:
- 资源跳转: A链接、重定向、表单提交
- 资源嵌入:
<link>、<script>、<img>、<frame>等dom标签,还有样式中的backgrond:url()、@font-face()等文件外链 - 脚本请求:js发起的ajax请求、dom和js对象的跨域操作等
同源策略
同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。同源是指“协议+域名+端口”三者相同,几遍两个不同的域名指向同一个ip地址也不是同源的。
同源策略限制行为:
1. Cookie、LocalStorage 和 IndexDB无法读取
2. DOM 和 JS 对象无法获得
3. AJAX 请求不能发送
常见跨域场景
- 同一域名,不同文件或者路径 (允许)
- 同一域名,不用端口 (不允许)
- 同一域名,不同协议 (不允许)
- 域名和域名对应相同IP (不允许)
- 主域名相同,子域名不同 (不允许)
- 不同域名 (不允许)