美文网首页
前端中的通信(一)

前端中的通信(一)

作者: 阿昕_ | 来源:发表于2018-06-29 23:16 被阅读24次

什么是同源策略及限制

  • 源:协议(http/https/ws)+域名(www.baidu.com)+端口(80),不一样就是跨域了。
  • 同源策略:限制两个不同的源之间的资源交互,是用于隔离潜在恶意文件的安全机制。
  • 限制:
    -- cookie、localStorage、indexDB无法读取
    -- DOM无法获得
    -- Ajax请求不能发送

前后端如何通信

  • Ajax
  • websocket
  • CORS

如何创建Ajax

  • 创建ajax对象(兼容处理)
  • open()
  • send()
  • onreadystatechange
  • readyState
  • status
  • JSON.parse(xhr.responseText)
function ajax(){
    var xhr = null;
    try{
        xhr = new XMLHttpRequest();
    } catch(e){
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    xhr.open('get','getNews.php',true);
    xhr.send();
    
    /*
    xhr.open('post','1.post.php',true);
    xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');//申明发送的数据类型
    xhr.send('username=刘&age=3');
    */
    
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if( xhr.status ==200 || xhr.status ==304  ){
                //alert( xhr.responseText );//string
                var data = JSON.parse(xhr.responseText);
            }else{
                alert( '出错了,Err:' + xhr.status );
            }
            
        }
    };
};

跨域通信的几种方式

  • jsonp :动态添加<script>标签,执行服务器返回的函数
  • hash :hash改变页面不会刷新,改变hash后,监听hash变化,获取数据
  • postMessage :
window.postMessage('data','http://a.com')
window.addEventListener('message',(event)=>{
   console.log(event.origin,event.source,event.data) 
},false)
  • websocket :
var ws = new WebSocket("wss://echo.websocket.org");

ws.onopen = function(evt) { 
  console.log("Connection open ..."); 
  ws.send("Hello WebSockets!");
};

ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
  ws.close();
};

ws.onclose = function(evt) {
  console.log("Connection closed.");
};  
--------------------------------------------------
> Connection open ...
> Received Message: Hello WebSockets!
> Connection closed.

  • CORS(Cross-Origin Resource Sharing, 跨源资源共享) : 浏览器会拦截ajax请求,如果是跨域的,会在http请求中添加origin
fetch("/a/url",{
    method:'get',
}).then(
    function(response){
        if(response.status!==200){
            console.log("存在一个问题,状态码为:"+response.status);
            return;
        }
        //检查响应文本
        response.json().then(function(data){
            console.log(data);
        });
    }
).catch(function(err){
    console.log("Fetch错误:"+err);
});

相关文章

  • 前端中的通信(一)

    什么是同源策略及限制 源:协议(http/https/ws)+域名(www.baidu.com)+端口(80),不...

  • 前端通信

    同源策略及限制 1、先来说说什么是源• 源(origin)就是协议、域名和端口号。以上url中的源就是:htt...

  • 基于qiankun的微前端最佳实践-通信篇(Vuex)

    大家好~~ 在开始介绍 qiankun 的应用通信之前,我们需要先了解微前端架构如何划分子应用。 在微前端架构中,...

  • Jetty Websocket

    1.序言   在工作中,我们有时候需要使用能与前端长时间实时通信传输以通信,这时就出现了的websocket。 2...

  • 在Jetty中使用websocket

    1.序言 在工作中,我们有时候需要使用能与前端实时通信传输以通信,这种技术就是由Socket实现的,而Socket...

  • 前端通信进阶

    在几年前,天空一声巨响,ajax 闪亮登场. 前端宝宝们如获至宝~ 已经表单提交神马的, 真的太 心累了. 有了a...

  • 前端通信基础

    1、什么是同源策略及限制 (1)同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这个是一个用...

  • 前端页面通信

    websocket:需要服务端配合socket.io/ websocket-node service worker...

  • 快速上手微前端框架 icestark (二)

    思考 微前端中都需要哪些通信 主应用与子应用通信 子应用之间的通信 主应用与子应用通信 主应用传参到子应用 sto...

  • kuangjia

    框架 通信方面。针对系统集成项目开发,无非就是使用TCP/IP通信进行网络之间的通信,二进制数据流的传输。 前端界...

网友评论

      本文标题:前端中的通信(一)

      本文链接:https://www.haomeiwen.com/subject/wdpzyftx.html