常见的跨域方式及原理-第二篇

本文介绍了HTML5中的window.postMessage方法实现跨域的原理,包括消息发送与接收的详细过程,并提到了IE6,7不支持的情况。接着,讲解了CORS(跨源资源共享)的原理,列出其浏览器兼容性,以及使用示例。最后,讨论了CORS的优缺点,指出其支持所有类型的HTTP请求但老式浏览器可能不支持。" 8268869,1358927,5*5矩阵调整:最大值居中,最小值放角,"['算法', '数据结构', '矩阵操作', 'C++编程']
摘要由CSDN通过智能技术生成

四、html5中的window.postMessage(message,targetOrigin)
跨域原理:调用postMessage方法的对象是指要接收消息的那个对象,该方法被调用时,将分发一个消息事件,该方法的第一个参数为要发送的消息,类型只能为字符串,第二个参数用来限定接收消息的那个windoe对象所在的域,如果不想限定域,可以用通配符*;
需要接收消息的window对象,通过监听自身的message事件来获取传过来的消息,消息内容储存在该事件对象的data属性中。

示例:
这里写图片描述

这里写图片描述

结果:
这里写图片描述

注意:ie6,7不支持


五、CORS
跨域原理:使用自定义的http头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。

浏览器支持情况:
Chrome 3+
Firefox 3.5+
Opera 12+
Safari 4+
Internet Explorer 8+

Chrome,Firefox,Opera和Safari都使用XMLHttpRequest2对象。 Internet Explorer使用了类似的XDomainRequest对象,其工作原理和XMLHttpRequest大致相同,但增加了额外的安全预防措施。

示例:
访问页面:cors_test.ejs

// 创建XHR 对象.
function createCORSRequest(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // XHR for Chrome/Firefox/Opera/Safari.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // XDomainRequest for IE.
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    // 不支持CORS.
    xhr = null;
  }
  return xhr;
}

// 发起CORS请求
function makeCorsRequest() {
  var url = 'http://www.otherapp.com/cors_data';
  var xhr = createCORSRequest('GET', url);
  if (!xhr) {
    alert('CORS not supported!');
    return;
  }

  // 响应处理
  xhr.onload = function() {
    var text = xhr.responseText;
    alert(text);
  }
  xhr.onerror = function() {
    alert('Woops, there was an error making the request.');
  }

  xhr.send();
}

makeCorsRequest();

后台路由:index.js

/* CORS Test */

router.get('/cors_test', function(req, res) {  
  res.render('cors/cors_test');
});

router.get('/cors_data', function(req, res) {  
  var data = { name: "chenjun", age: "25" };
  // 设置响应头
  res.setHead('Access-Control-Allow-Origin', '*');
  res.end(JSON.stringify(data));

CORS优缺点:
优点:支持所有类型的HTTP请求;使用普通的XMLHttpRequest发起请求和获得数据,拥有良好的出错处理
缺点:老式浏览器不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值