1、什么是跨域?

跨域(cross-origin)其实就是跨源,是指的浏览器不能执行其它网站的脚本,是浏览器对JavaScript实施的安全限制。跨域由于浏览器的同源策略所导致的。同源策略要求源相同才能正常进行通信。

跨域只存在于浏览器端,不存在于安卓/ios/Node.js/python/java等其它环境

同源策略

同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。
源(origin)是什么?什么是同源?

image.png

URL 说明 是否跨域,能否通信
http://www.doman.com/a.js
http://www.doman.com/b.js
协议、域名、端口相同 否,可通信
http://www.doman.com:8000/a.js
http://www.doman.com/b.js
协议、域名相同
端口不同
跨域,不可通信
http://www.domain.com
http://x.doman.com
http://doman.com
协议与端口相同
域名不同
跨域,不可通信
http://www.domain.com
https://www.domain.com
协议与端口不同,域名相同
(http 默认为 80 端口,https 默认为 443 端口)
跨域,不可通信
http://www.domain.com
http://192.168.3.1:80
协议与端口相同
域名不同
跨域,不可通信

2、跨域限制了什么?

同源策略限制了不同源之间的交互,交互分为三种情况:

  1. 跨域写操作:一般被允许,例如重定向和表单提交。例如:在http://www.google.com 中打开控制台输入 window.location.href = ‘http://www.baidu.com',此时不受限制。

  2. 跨域资源嵌入:一般被允许。主要指的是 script、img、link 等带有 src 属性的标签不受同源策略限制。