• 跨域的几种方式


    跨域的几种方式

    • CROS
    • 图像Ping
    • JOSNP
    • Comet
    • Web Sockets
    • HTML5 postMessage

    CROS(Cross-Origin Resource Sharing): 跨域资源共享

    原理是自定义HTTP头部Origin,这个部分由浏览器控制,这个过程与cookie无关。
    例如:Origin: http://www.abc.com

    服务器判读Origin的值是否在自己白名单当中,如果是,返回Access-Control-Allow-Origin: "http://www.abc.com"

    当访问服务器的资源为公共资源时,也就是服务器不限制请求来源时,返回Access-Control-Allow-Origin: "*"

    图像Ping

    原理是创建一个实例,设置src进行单向通信,只能发送GET请求

    var img = new Image();
    img.onload = img.onerror = function() {
        alert("Ok");
    }
    img.src = "http://www.abc.com"
    

    JSONP

    原理是通过动态创建script标签完成

    function handler(res) {
        console.log("The content:", res);
    }
    var script = document.createElement("script");
    script.src = "http://www.abc.com?callback="handler"";
    document.body.insertBefore(script, document.body.firstChild);
    

    Comet

    是一种服务器向页面推送数据技术。

    有两种实现方式:长轮询HTTP流

    长轮询

    浏览器向服务器发送连接请求,浏览器就一直保持连接打开状态,服务器有数据时便发送数据到浏览器,浏览器关闭连接。然后再次发送连接请求。

    HTTP流

    浏览器向服务器发送一次连接请求,服务器一直保持连接打开状态。浏览器即使接受数据了也不会断开连接。

    SSE(Server-Sent Event): 服务器发送事件

    围绕着Comet推出的API

    var source = new EventSource(url); //url 必须与source创建对象的页面同源。
    source.onmessage = function(event) {
        var data = event.data;
        // 处理数据
    }
    source.close(); // 手动关闭连接
    

    Web Sockets

    在一个单独的持久连接上提供全双工、双向通信。

    wx:// 或 wss:// 为协议名

    var socket = new WebSocket("ws://www.abc.com/1.php");
    // 成功连接后
    socke.onopen = function(){
        alert("Connect Success");
    }
    
    // 连接发生错误
    socket.onerror = function(err) {
        alert("Connect Failed ", err);
    }
    
    // 发送数据
    socket.send("Test message");
    
    // 接受数据
    socket.onmessage = function(event) {
        var data = event.data;
        // 处理数据
    }
    
    socket.close() // 关闭socket连接
    

    HTML5 postMessage

    HTML5 window.postMessage 是一个安全的、基于事件的消息API,可用于html内嵌iframe、window.open()新窗口之间的通信。

    //发送信息

    window.postMessage(msg, url);

    //接收postMessage信息

    window.addEventListener("message", func, false);
    function func(event) {
        var data = event.data;
        // 处理数据
    }
    
  • 相关阅读:
    整数的唯一分解定理【模板】
    poj 1419Graph Coloring 【dfs+补图+计算最大团+计算最大独立集 【模板】】
    poj 1065 Wooden Sticks 【贪心 新思维】
    poj 3126 Prime Path 【bfs】
    hihocoder 第五十二周 高斯消元·二【高斯消元解异或方程 难点【模板】】
    poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】
    poj 1019 Number Sequence 【组合数学+数字x的位宽函数】
    括号匹配
    Digit
    Ace of Aces
  • 原文地址:https://www.cnblogs.com/miku561/p/10500537.html
Copyright © 2020-2023  润新知