跨域通信

跨域通信常用的几种方式

1、JSONP

2、WebSocket

3、CORS

4、Hash

5、postMessage

1、JSONP

  • JSONP的原理是什么?怎么实现的?
    JSONP的原理:通过<script>标签的异步加载来实现的。可以通过<script>标签的src,里面放url,通过script标签引入的js是不受同源策略的限制,得和后端订好那个字段是回调函数

2. CORS

  • CORS 可以理解成是既可以同步、也可以异步*的Ajax。
    fetch 是一个比较新的API,用来实现CORS通信
 // url(必选),options(可选)
      fetch('/some/url/', {
          method: 'get',
      }).then(function (response) {  //类似于 ES6中的promise

      }).catch(function (err) {
        // 出错了,等价于 then 的第二个参数,但这样更好用更直观
      });
  • “CORS为什么支持跨域的通信?”
    答案:跨域时,浏览器会拦截Ajax请求,并在http头中加Origin。

3.postMessage

场景:窗口 A (http:A.com)向跨域的窗口 B (http:B.com)发送信息。步骤如下。
(1)在A窗口中操作如下:向B窗口发送数据:

    // 窗口A(http:A.com)向跨域的窗口B(http:B.com)发送信息
    Bwindow.postMessage('data', 'http://B.com'); //这里强调的是B窗口里的window对象

(2)在B窗口中操作如下:

    // 在窗口B中监听 message 事件
    Awindow.addEventListener('message', function (event) {   //这里强调的是A窗口里的window对象
        console.log(event.origin);  //获取 :url。这里指:http://A.com
        console.log(event.source);  //获取:A window对象
        console.log(event.data);    //获取传过来的数据
    }, false);

4. WebSocket

首先Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分与后台的握手。

//创建WebSocket的对象。参数可以是 ws 或 wss,后者表示加密。
var ws = new WebSocket("ws://localhost:9998/echo");

// 建立 webSocket 连接成功触发事件
ws.onopen = function () {
  // 使用 send() 方法发送数据
  ws.send("发送数据");
  alert("数据发送中...");
};

// 接收服务端数据时触发事件
ws.onmessage = function (evt) {
  var received_msg = evt.data;
  alert("数据已接收...");
  ws.close()
};

// 断开 webSocket 连接成功触发事件
ws.onclose = function () {
  alert("连接已关闭...");
};
  • 事件处理程序 描述
    ws .onopen 连接建立时触发
    ws .onmessage 客户端接收服务端数据时触发
    ws .onerror 通信发生错误时触发
    ws .onclose 连接关闭时触发
  • 方法 描述
    ws .send() 使用连接发送数据
    ws .close() 关闭连接,
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、跨域and同源政策 1.跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对ja...
    Viaphlyn阅读 470评论 2 1
  • 阮一峰同源策略浏览器处于安全考虑实行了同源策略机制。同源指的是 协议相同 域名相同 端口相同 举例来说,http:...
    209bd3bc6844阅读 451评论 0 0
  • 概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe...
    npmstart阅读 2,295评论 0 5
  • 概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe...
    简叶一枚阅读 1,724评论 0 3
  • 平时我们生活工作沟通对话都不怎么紧张,但是遇到做演讲时总是很头疼的一件事,例如向公司领导们汇报,工作总结演讲或者个...
    心智升级之路阅读 209评论 0 1

友情链接更多精彩内容