• 跨域信息传递解决方案


    方案一:jsonp

    利用 <script> 标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP请求一定需要对方的服务器做支持才可以。

    SONP优点是简单兼容性好,可用于解决主流浏览器的跨域数据访问的问题。缺点是仅支持get方法具有局限性,不安全可能会遭受XSS攻击

    实现方法:

    1、通过id="sendJsonp"的按钮动态创建script标签,src属性为跨域请求地址,后接参数为回调函数callback

    function createScript(src) {
        $("<script></script>").attr("src",src).appendTo("body")
    }
    $("#sendJsonp").click(function(){
        createScript("http://127.0.0.1:8080/test?callback=callback");
    });
    

    2、定义回调函数处理正常的业务逻辑,这里就控制台输出跨域请求结果。

    function callback(json) {
        console.log(json)
    }

    3、服务端代码

    // server.js
    let express = require('express')
    let app = express()
    app.get('/test', function(req, res) {
      let { callback } = req.query
      res.end(`${callback}('hello world')`)
    })
    app.listen(8080)

    方案二:postMessage

    1、可以解决同一个浏览器打开的2个窗口之间的通信(必须是要通过JS触发打开的另一个页面之间通信,比如在一个页面通过window.open,打开另外一个页面,然后这两页面之间可以通信)

    2、可以解决iframe嵌套页面之间的通信

    实现方法

    在页面一中:

    $('#newpage').click(function(){
      newUrl = 'http://172.168.10.24:3808/test2/table.html'
       var myPopup  = window.open(newUrl,'myWindow')
       setTimeout(function(){
        myPopup.postMessage('页面一来了','http://172.168.10.24:3808/');
       },4000)
    })

    window.addEventListener('message',function(event) {
      if(event.origin !== 'http://172.168.10.24:3808') return;
      console.log('received response: ',event.data);
    },false);

     

    在页面二中

     window.addEventListener('message',function(event) {
        if(event.origin !== 'http://172.168.10.24:3808') return;
        console.log('received response: ',event.data);
    },false);
    
    setTimeout(function(){
      window.opener.postMessage('页面二来了','http://172.168.10.24:3808/')
    },4000)

    opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。

    当使用window.open()打开一个窗口,您可以使用此属性返回来自目标窗口源(父)窗口的详细信息。

    代码提示: window.opener.close()将关闭源(父)窗口。

    方案三:websocket

    Websocket是HTML5的一个持久化的协议,它实现了浏览器与服务器的全双工通信,同时也是跨域的一种解决方案

    方案四:服务器(Node)中间件代理

    实现原理:同源策略是浏览器需要遵循的标准,而如果是服务器向服务器请求就无需遵循同源策略

    方案五:nginx反向代理

    实现原理类似于Node中间件代理,需要你搭建一个中转nginx服务器,用于转发请求

    方案六:cors

    实现 CORS 通信的关键是后端。只要后端实现了 CORS,就实现了跨域。

    服务端设置 Access-Control-Allow-Origin 就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。

  • 相关阅读:
    Vue.directive()方法创建全局自定义指令
    vue中通过ref属性来获取dom的引用
    v-cloak指令
    v-if和v-show
    vue中的v-on事件监听机制
    vue指令v-model
    vue中v-for系统指令的使用
    从零开始在虚拟机中搭建一个4个节点的CentOS集群(一)-----下载及配置CentOS
    MySQL-数据库创建与删除
    MySQL-PREPARE语句
  • 原文地址:https://www.cnblogs.com/liumingwang/p/15328918.html
Copyright © 2020-2023  润新知