美文网首页
不同子域的跨域xhr请求实现方法

不同子域的跨域xhr请求实现方法

作者: PeterQ1998 | 来源:发表于2017-05-05 21:12 被阅读0次

前后端业务分离时,可能有部署在不同域名下的需求。例如前端页面等资源部署在www.peterq.cn域名下,供用户访问,该域下的页面通过api.peterq.cn下的接口获取数据。但是浏览器会将这2个域名判断为异域,不做处理,www.peterq.cn无法获取api.peterq.cn下的数据。

“正宗”的跨域解决方案当然是采用CORS,不过这得需要服务器和浏览器支持,且有时还会多出一个options请求,加大服务器负载,延长响应时间,让人很不爽。对于主域名一致的子域之间跨域其实有更好的解觉办法。

在DOM中的domain属性其实是可写的。当然并不是随意写,有限制,子域页面可以将其domain赋值成其父域,例如www.peterq.cn下的域名可执行document.domain = "peterq.cn",但修改成其他域,均会报错。利用这个特性便可以实现子域之间跨域了

1、www.peterq.cn下修改domain为'peterq.cn'

www.peterq.cn中输出的页面header里添加如下代码

<script>
  document.domain= 'peterq.cn'
</script>

2、api.peterq.cn下修改domain为'peterq.cn'

api.peterq.cn域下添加/cross路由,并输出如下内容

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8>
    <title>cross</title>
<script>
  document.domain = 'peterq.cn'
  function xhr(){
    return new XMLHttpRequest()
  }
</script>
</script>
</head>
<body>
</body>
</html>

3、在www.peterq.cn页面中嵌入iframe 引用//api.peterq.cn/cross,并代理xhr对象

www.peterq.cn的页面中,所有的js代码之前添加如下js片段

<script>
  document.write('<iframe src="//api.peterq.cn/cross" name="agent" style="display:none;"></iframe>')
  var _XMLHttpRequest = window.XMLHttpRequest
  window.XMLHttpRequest = function(){return agent.xhr()}
</script>

完成以上3步,就可以当作同域进行开发了,如果是已有项目,不需改动其他任何代码 :) 当然你得等到iframe,ready之后再实例化XMLHttpRequest,因为此时agent.xhr还是undefined
happy hacking~

相关文章

  • JavaScript - GET/POST及跨域方法

    xhr 原生方法请求 window fetch 方法 关于跨域 利用JSONP实现跨域调用 使用 CORS(跨域资...

  • ajax跨域相关学习

    1.跨域请求失败产生的原因1.1.浏览器限制1.2.xhr(XMLHttpRequest)请求1.3.跨域(不同域...

  • 不同子域的跨域xhr请求实现方法

    前后端业务分离时,可能有部署在不同域名下的需求。例如前端页面等资源部署在www.peterq.cn域名下,供用户访...

  • ajax跨域完全讲解

    产生跨域原因 浏览器限制 跨域(协议、主机名、端口号等不同就属于跨域) XHR(XMLHttpRequest)请求...

  • 跨域解决方案

    AJAX跨域产生的原因? 1、浏览器限制 2、XHR(XMLHttpRequest)请求 3、跨域(域名不同、端口...

  • 跨域

    什么是跨域? 为什么会发生ajax跨域?浏览器限制跨域【发出的请求不是本域】XHR请求【json】 解决思路:1:...

  • 跨域

    ??JSONP只能解决GET请求跨域,不能解决POST请求跨域问题,XHR2可以解决GET,POST方式的请求跨域...

  • 产生跨域的原因

    产生跨域的原因 浏览器的限制 跨域 XHR(XMLHttpRequest)请求 1、浏览器的限制 2、跨域 跨域概...

  • 跨域

    1、跨域是什么 域指的是域名,向一个域发送请求,如果请求的域和当前域是不同域,就叫跨域;不同域之间的请求就叫跨域请...

  • 什么是跨域?跨域有几种实现形式:

    跨域指的是跨过同源策略,实现不同域之间进行数据交互的过程叫跨域。跨域的实现形式主要有JSONP方法、CORS方法、...

网友评论

      本文标题:不同子域的跨域xhr请求实现方法

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