zoukankan      html  css  js  c++  java
  • 跨域

    什么是跨域?

      在不同的域名下进行数据交互就会产生跨域.JS为了安全起见,是不允许不同页面进行数据交互的.

      既然数据无法交互,就会对ajax产生影响,因为ajax是通过xmlHttpRequest进行数据交互,而这个对象在不安全的情况下不允许进行数据交互,所以说ajax不允许跨域.比如一个公司有多个网站,这几个网站进行合作的时候就会产生跨域问题.

    什么情况下不存在跨域问题?

    www.a.com/b.js

    www.a.com/d.js

    以下情况会存在跨域问题.

    1.不同子域

    2.不同域名下.哪怕这两个不同的域名指向同一个IP地址,也会存在跨域问题.

    解决方式.

    1.子域和主域之间都设置 dcument.domain = "主域名网址";

    2.不同域名下通过服务器代理,通过XMLHttpRequeat代理文件.优点:可以做到任何想要的数据交互.缺点:增大服务器压力

    3.script标签:jsonp格式,script不存在跨域.所以可以把src当做请求的地址.因为script标签除了可以请求JS文件,其他类型也是可以的.比如:php.只要页面运算完返回的是json或者JS,就不会有问题.

    jsonp原理: json+padding:将json填充到一个盒子中.

     

    注意:引入的文件必须放在底部.

    动态创建script标签

    4.location.hash

    跨域无非就是发送一个请求去取页面中的数据,可以通过iframe.比如在a网站中嵌套一个b网站的iframe,可以把数据添加到它的hash值上,因为加上hash是不会改变页面的网址的,这样的话就可以把数据带过去,通过数据带过去之后,b网站进行解析然后返回数据,返回的时候它本身可以通过parent.location.hash = 来更新现在这个页面的hash值,通过更新这个页面的hash值就可以使这个页面来获取b网站上对应的数据了.parent.location.hash这个方法是另一个域下的,有的浏览器不支持,比如ie chrome.解决方法:可以再去创建一个a网站的页面,比如:yyy.html#,因为他们是同一个网站下的,这个时候parent.location.hash=self.location.hash.通过改变hash值来进行双域之间的数据交互.

    5.window.name

    总结:

      jsonp有一个缺点,它只是一个单域操作,就像以上说的,b网站的数据(我们要获取的)是不能修改的,而iframe的hash值是可以双域操作的.window.name比较安全,因为它不会暴露出来,各有好处,工作时需要择优选择.

  • 相关阅读:
    【Exgcd】斩杀线计算大师
    【DP】操作集锦
    【DP】被3整除的子序列
    【DFS序】【CF-1328E】Tree Queries
    【规律】【CF1327-D】Carousel
    Luogu P4774 屠龙勇士
    LOJ 10149 凸多边形的划分
    Luogu P4036 火星人
    Luogu P3193 GT考试
    CF 986C AND Graph
  • 原文地址:https://www.cnblogs.com/aomore/p/4589850.html
Copyright © 2011-2022 走看看