正常情况下JavaScript脚本受同源策略只能访问与其同一域下的资源。
比如http://www.xx.com中的www为子域, 该域名与http://api.xx.com同主域下的不同子域,当你希望在www.xx.com中利用ajax向api.xx.com发送http请求时,称为子域间的请求。即使主域虽然相同,但仍属于不同的源,正常情况下是被禁止通信的。
ajax在跨域情况下,请求会被浏览器拦截。但iframe却不会其特性如下:
当前页面的源,即域名,其值可更改,但有一些限制,具体如下:
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方法
评论