首先,跨域是因为浏览器的“同源策略”问题,跟服务器没有关系。
因为“同源策略”,不同源之间的站点:

  1. 无法访问对方存储在浏览器中的数据,比方localStorage, IndexedDB,Cookie
  2. DOM无奈取得
  3. AJAX申请不能发送

不同源站点的通信能够通过以下办法:

  1. 通过设置雷同的document.domain能够共享cookie,也能够用于父子窗口获取彼此Dom
  2. 通过window.onhashchange共享hash值,仅限于父子窗口(内嵌iframe)
  3. 通过postmessage

至于AJAX申请,浏览器先会查看申请门路与以后页面是否同源,同源间接发送,不同源就要先hold住,在申请的header外面加个Origin属性,发一个【预检申请】,服务器收到该申请后,依据本身的配置返回后果

  1. Access-Control-Allow-Origin: 容许跨域的域名列表
  2. Access-Control-Allow-Methods: 容许逾越的申请形式
  3. Access-Control-Allow-Headers: 容许跨域的Header列表
  4. Access-Control-Expose-Headers:容许裸露给JavaScript代码的Header列表
  5. Access-Control-Max-Age:最大的浏览器缓存工夫,单位为s

浏览器依据返回数据判断,符合条件则发送正式申请,不合乎就回绝发送申请。

这也就是CORS,不过CORS在【简略申请】时,不会发送预检申请