跨域方法浅谈(真的是浅谈)

一、CORS方法
本人浅谈

二、JSONP(填充式JSON)
发出请求域定义回调函数,响应请求域返回函数执行字符串(即:‘functionName (data)’),并将要发送的数据以参数形式填充入所返回的字符串中。说白了就是XXS攻击(js代码恶意植入)

可执行原因
借助了<script>标签src资源不受同源策略限制的特性。在此,还有如下标签src加载不受同源限制,<link href='xxx'>、<img src='xxx' />、<iframe src='xxx'>

只允许get请求原因
碍于标签<script>获取参数方式,便使用get方法将回调函数名传给后端服务器

<body>
  <div id="divCustomers">
  </div>
  <script type="text/javascript">
    function callbackName(result, methodName) {
      console.log(result)
      console.log(methodName)
      var html = '<ul>';
      for (var i = 0; i < result.length; i++) {
        html += '<li>' + result[i] + '</li>';
      }
      html += '</ul>';
      document.getElementById('divCustomers').innerHTML = html;
    }
  </script>
  <script type="text/javascript" src="https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackName"></script>
</body>

三、修改document.domain,实现不同子域间的通信
我们先说说document.domain的作用是获取/设置当前文档原始域名,遵循同源策略

既然说是遵循同源策略,但是有哪里来说的跨域呢?这其实是通过document.domain的修改,将两个处于同一父域名下的子域名,进行域名提升,全都变为父域名,从而实现严格的同源,已达到可相互通信的目的。

域名层级图
在这里插入图片描述
在此,要实现在a.test.com域名下的a.html与在b.test.com域名下的b.html通信时

// a.html
document.domain = 'test.com'

// b.html
document.domain = 'test.com'

这便使两个文档实现了严格的同源,从而实现可互相通信。

四、HTML5的postMessage方法
一个发送,一个接收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值