• 网络系列之跨域


      由于浏览器的同源策略(不了解同源策略请点这里→ 网络系列之 jsonp 百度联想词),导致了不同 协议 域名 端口 的网页之间不能传数据。下面的几种方法,就是为此而生。

      1.jsonp

      2.服务器代理

      3.iframe

        3.1 window.name(父窗口拿子窗口数据)

        3.2 location.hash(子窗口拿父窗口数据)

        3.3 window.postMessage(双向)

      4.cors

      5.document.domain

    1.jsonp 

      利用  script   img  等带有 src属性的标签进行跨域(详细说明请移至网络系列之 jsonp 百度联想词)

    var oscript = document.createElement('script'); 
    oscript.src = 'http://wthrcdn.etouch.cn/weather_mini?city=揭阳&callback=ds';
    document.body.appendChild(oscript);
    oscript.remove();
    
    
    function ds(data){
       console.log(data)
    }

    创建一个带有src 属性的标签, 例如 script   把url  放入 src  数据拼接到  url  后面即可,   具体的 回调函数名, 请查看 接口文档需要你填什么名。

    2.服务器代理

      这个得需要服务器的配合, 服务器 之间  是没有同源策略限制的。

    3.iframe

      3.1 window.name  (父窗口拿子窗口数据)

        

    两个窗口,虽然是嵌套关系, 但是他们两个 分部在不同的 端口,也就是不同源, 那么 父窗口怎么拿到 子窗口的数据呢, 接下来,第一种方法,利用window.name 这个方法,把想要传输的数据,放到window.name 上面。  window.name 这个方法比较特殊,一旦你设置了这个值后, 除非你关闭 该窗口,不然这个值会一直存在,我们刚好可以利用这个,获取数据。

    接下来,在父窗口的代码如下:

      3.2 location.hash(子窗口拿父窗口数据)

      3.3 window.postMessage(双向)

    4.cors

      这个跨域方法是最省事的。因为不用我们设置(哈哈哈),他的全名是cross-origin resource sharing, (跨域资源共享)

    后端会设置一个响应头, access-control-allow-origin: 'http://www.baidu.com'     在响应头里面 可以看见。 如果设置了 http://www.baidu.com 就说明 这个页面 可以访问该服务器。如果没有在这名单里面,就不可以。 当然 可以设置 * 号,代表,都可以访问。

    前端呢,会发出请求到服务器, 判断是否同源, 如果不同源,他就回去响应报文的响应头里面 看看 access-control-allow-origin: 'http://www.baidu.com'  的名单下 是否有他自己。 如果没有,抱歉,你不能访问。

    5.document.domain

      这个方法,只限于 基础域名相同的 网站。例如: tj.58.com  和  bj.58.com  他们也是不同源,域名不同, 那么他们就可以在 页面里设置   document.domain = '58.com'; 都需要设置,  那么 他们就可以相互 拿数据啦。

    如果有哪里理解不对,麻烦帮我指出来, 谢谢啦。

  • 相关阅读:
    SAMBA服务初学练习
    NFS与AutoNFS实例
    NTP服务简介
    DHCP服务简单搭建步骤
    HBase文档操作--练习篇
    Hadoop体系结构管理
    HBase表结构设计--练习篇
    HBase备份恢复练习
    MongoDB管理练习
    24_BlockingQueue接口
  • 原文地址:https://www.cnblogs.com/yanggeng/p/11185716.html
Copyright © 2020-2023  润新知