浏览器的同源政策及其规避方法

含义

  • 同源:
    协议相同
    域名相同
    端口相同

限制范围

  • Cookie、LocalStorage 和 IndexDB 无法读取
  • DOM 无法获得
  • AJAX 请求不能发送

document.domain

  • 一级域名相同,二级域名不同
Cookie
  • 只有同源的网页才可以共享
  • 两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置 document.domain 共享 Cookie
  • 适用于 Cookie 和 iframe

  • A 网页:http://w1.example.com/a.html
    B 网页:http://w2.example.com/b.html
    设置相同的 document.domain
    在这里插入图片描述
    A 网页设置一个 Cookie
    在这里插入图片描述
    B 网页读取这个 Cookie
    在这里插入图片描述
iframe
  • 如果两个网页不同源,就无法拿到对方的 DOM
  • iframe 窗口和 window.open 方法打开的窗口,无法与父窗口通信
  • 如果两个窗口一级域名相同,只是二级域名不同,可以通过 document.domain 属性,就可以规避同源政策,拿到DOM
  • 用 document.domain + iframe实现跨域

完全不同源

片段标识符
  • 父窗口可以把信息,写入子窗口的片段标识符
    var src = originURL + '#' + data;
    document.getElementById('myIFrame').src = src;
    
  • 子窗口通过监听 hashchange 事件得到通知
    window.onhashchange = checkMessage;
    
    function checkMessage() {
      var message = window.location.hash;
      // ...
    }
    
  • 子窗口也可以改变父窗口的片段标识符
    parent.location.href= target + "#" + hash;
    
window.name
window.postMessage

使用 window.postMessage 解决窗口间通信

webSocket 解决跨域问题

Ajax跨域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值