跨域请求之子域间相互请求
作者:edwin
日期:2015-06-10 18:57:00
所属分类:前端 - javascript

正常情况下JavaScript脚本受同源策略只能访问与其同一域下的资源。

什么是子域间请求

比如http://www.xx.com中的www为子域, 该域名与http://api.xx.com同主域下的不同子域,当你希望在www.xx.com中利用ajax向api.xx.com发送http请求时,称为子域间的请求。即使主域虽然相同,但仍属于不同的源,正常情况下是被禁止通信的。


iframe

ajax在跨域情况下,请求会被浏览器拦截。但iframe却不会其特性如下:

  1. 访问同域页面,比如xx.html,可读写。
  2. 访问跨域页面,比如http://www.baidu.com/xx.html,只读。


document.domain

当前页面的源,即域名,其值可更改,但有一些限制,具体如下:

1. 只能往父、祖域设置,即当前域的一个后缀

2. 有端口时需注明端口号, 否则端口号被设置null

3. 需要通信的页面都要设置,即使是简单的将父域设置为其原来的值


解决方法

比如http://www.xx.com/a.html 向 api.xx.com/b 发送http请求。

1. 可在a.html中内嵌iframe,其src指向api.xx.com/proxy.html

2. 在 a.html 和 proxy.html 中更改document.domain为"xx.com"

3. 通过a.html中的iframe中的proxy.html向/b发送请求并接收回调

4. finish!


备注

该方法支持子域间GET, POST方法

评论

全部评论 / 0