跨域:就是不同域之间进行相互资源请求;
浏览器在解析JavaScript出于安全方面的考虑,只允许在同域名下页面进行相互资源请求调用,不允许调用其他域名下的页面的对象;简单的理解就是因为JavaScript同源策略的限制。

同源策略要求源相同才能进行正常的资源交互,即要求当前页面与调用资源的协议,域名、子域名、端口完全一致;不一致则就是跨域。

一个域名地址的组成:

zk 跨资源池容灾部署_同源策略

同源策略限制一个资源地址加载的文档或脚本与来自另一个资源地址的资源进行交互。这是浏览器的一个用于隔离潜在恶意文件的关键的安全机制。它的存在可以保护用户隐私信息,防止身份伪造等(读取Cookie)。
同源策略限制内容有:
1、Cookie、LocalStorage、IndexedDB等存储性内容
2、不允许进行DOM节点的操作
3、不能进行AJAX请求

CORS
CORS 需要浏览器和后端同时支持。IE8 和 9需要通过XDomainRequest 来实现。
浏览器会自动进行CORS通信,实现CORS通信的关键是后端。只要后端实现了CORS,就实现了跨域。
服务端设置 Access-Control-Allow-Origin 就可以开启 CORS。该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。
虽然设置CORS和前端没什么关系,但是通过这种方式解决跨域问题的话,会在发送请求时出现两种情况,分别为简单请求和复杂请求。
简单请求
以Ajax为例,当同时满足以下两大条件,会触发简单请求
1.
使用下列方法之一:
GET
HEAD 基本针对head头进行请求
POST
Content-Type 的值仅限于下列三者之一:
text/plain
multipart/form-data
application/x-www-form-urlcoded
请求中的任意 XMLHTTPRequestUpload 对象均没有注册任何事件监听器;XMLHTTPRequestUpload 对象可以使用 XMLHttpRequest.upload 属性访问。

复杂请求
那么很显然,不符合以上条件的请求就肯定是复杂请求了。
对于复杂请求来说,首先会发起一个预检请求,该请求是 option 方法的,通过该请求来知道服务器端是否允许跨域请求。
document.domain
该方式只能用于二级域名相同的情况下,比如 a.test.com 和 b.test.com 适用于该方式。
只需要给页面添加 document.domain = ‘test.com’ 表示二级域名都相同就可以实现跨域
postMessage
这种方式通常用于获取嵌入页面中的第三方页面数据。一个页面发送消息,另一个页面判断来源并接受消息

跨域解决方案:
方案一:https://www.kancloud.cn/manual/thinkphp5_1/489844 方案二: