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

54次阅读

共计 619 个字符,预计需要花费 2 分钟才能阅读完成。

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

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

正文完
 0