同源策略以及突破

既然要突破同源策略,那就要知道什么是同源策略,要不然突破什么呢?
首先看看一个完整的URL的结构


同源策略以及突破_第1张图片

同源策略是指:

  • 协议(http或者https);
  • 域名(路径可以不相同);
  • 端口(port,一般http都是80,https:443)
    并且以上三者都需要相同,才被人为是同源;

同源策略目的:

不同源的客户端脚本(javascript)在没明确授权的情况下,不能读写非同源的资源;
想象一下,你刚在电影网站上买了票,网银转账,再去浏览别的网站,别的网站读取你的cookie怎么办?并且我还可以调用你网站的脚本,来获取用户信息以及别的信息;所以同源策略是必须的,要不然所有人的信息就是公共财产了;

限制范围:随着互联网的发展,越来越严格的同源策略,使得下面的行为,如果在非同源受到限制:

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

导致有时候,我们需要用到这些行为,但是又被限制影响了,那么就有如何去突破同源了

1.降域

对于主域相同子域不同(http://www.a.com/ ,http://child.a.com)的情况,在双方域名下 html 文件(index1.html,index2.html) 中都添加一句document.domain = a.com,将域名都设置成a.com,然后在index1.html中创建一个iframe,然后index1.html的JS就能够读取index2.html的数据了,虽然域名可以向上/下改,但是改完了之后又想改回去就不行;
降域的缺点:只对相同的后缀起作用,也就是主域相同的不同子域;只针对iframe形式的跨域;

2.JSONP(json with padding)

同源策略以及突破_第2张图片

这里自己写了一个 DEMO

基本思路就是:

  • 网页动态的添加一个

你可能感兴趣的:(同源策略以及突破)