跨域
因为跨域是我们经常在开发过程中遇到的问题,面试的时候面试官也经常问这个问题,特此记录一下。
定义
说到跨域,就不得不提一个概念:同源。
同源:狭义来说,就是指域名、协议和端口都相同。
跨域:简单来说,是指浏览器不能执行其他网站的脚本。
跨域问题其实就是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。
为了维护用户的安全,才有了浏览器的同源策略。
同源策略
是浏览器的一个安全限制,从一个源加载的文档或脚本在默认情况下是不能访问另一个源的资源的。
同源策略限制了以下行为:
- Cookie、LocalStorage 和 IndexDB
- DOM 和 JS 对象无法获取
- Ajax 请求发送不出去
但是!以下几种情况不受同源策略限制:
- 页面中链接(像本文末尾的链接),重定向和表单的提交
- 跨域资源的引入是不受同源策略影响的限制的,但是JS读不到其中的内容。比如
<script src="..."></script>
,<img>
,<link>
,<iframe>
等
比较明显的跨域
当域名、端口或协议不相同时,就会造成跨域问题,如:
例子1 | 例子2 | 方面 |
---|---|---|
http | https | 协议不同 |
8000 | 8001 | 端口不同 |
www | blog | 域名不同 |