关闭

apache代理 访问跨域代码

352人阅读 评论(0) 收藏 举报
分类:

在工作中遇到了这么一个问题?根据一个url路径来获取用户的状态,实际上是发送了一个servlet请求给服务器,然后server端通过数据流打印到前端。因此使用iframe能够显示前端的状态(图片或者是文字),现在的问题是开发人员想获取到我们写的用户状态,即在iframe中显示的文字,由于之前的URL已经指定了服务器的IP地址,因此在开发人员的应用中是无法访问这个iframe的,因为IP地址不一致,已经跨域了,所以不能访问。

 

我的解决办法 —— 利用apache的代理方式来访问?

1、在本机中安装apache,然后配置代理

ProxyPass /http-plugins/ http://172.16.14.81:9090/plugins/

备注:标示在apache访问/http-bind/类似于访问 http://172.16.14.81:7070/http-bind/目录下的内容

 

2、在apache容器下添加一个页面,里面包含一个iframe标签,将src以相对路径的方式访问,apache实际上是会访问其他IP地址的路径

<iframe id="test_iframe" name="test_iframe" src="/http-plugins/presence/status?jid=abc@jdchat&type=text" ></iframe>

或者

<iframe id="test_iframe" name="test_iframe" src="http://127.0.0.1/http-plugins/presence/status?jid=abc@jdchat&type=text" ></iframe>

备注:这两种方式的效果是一样的,都没有任何问题

 

apache根据url实际上访问的是下面的地址

<iframe id="test_iframe" name="test_iframe" src="http://172.16.14.81:9090/plugins/presence/status?jid=abc@jdchat&type=text"></iframe>

 

3、访问iframe里面的内容

function init() {
//使用Jquery的方式访问
    alert($("pre", document.getElementById('test_iframe').contentWindow.document).attr("innerHTML"));
//使用js原始代码访问
    //alert(window.frames["test_iframe"].document.getElementsByTagName('pre')[0].innerHTML);
    //alert(document.getElementById('test_iframe').contentWindow.document.body.innerHTML);
}

 

备注:我开始测试是将init方法放在jquery中的document.ready方法中运行的,在IE中能够正常显示,但是在chrom中无法访问,经过反复测试,将这个方法抽出来,使用按钮事件来触发,结果显示正确。

<input type="button" value="登录" id="hb" onclick="javascript:init();" style="font-size: 12px;"/>

 

结论:在IE中访问iframe中的内容实用是单线程,数据是从上往下运行,如果IFRAME中的数据没有获取到会阻塞,而chrome实际上上采用多线程的方式加载内容,页面的内容已经全部OK了,但是还是访问不到iframe里面的数据

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:281884次
    • 积分:8447
    • 等级:
    • 排名:第2300名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:4条
    最新评论