跨域是浏览器的限制,跟服务器什么关系

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

  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在【简单请求】时,不会发送预检请求

你可能感兴趣的:(javascript跨域)