跨域访问问题

      最近开发的模块需要用到跨域访问的方式,本来想可能会有跨域直接使用JavaScript读取页面内容的方法,结果Google了几天,没有发现有相关的解决方案。暂时可以下个结论:跨域访问时,不能直接在两个窗口之间读取数据(假如被读取窗口是直接返回数据的除外)。比如有窗口A和B,B窗口有一个<input>元素,直接从A窗口不能读取这个元素的value值。目前的结论是如此,假如哪位大牛不小心闲逛进来,发现我的结论是错误的,请一定给我留言指正我的错误。

      跨域访问解决方案主要有以下几种。

      1、服务器Proxy。

      实际上就是在服务器端获取跨域的数据。好处是可以返回任何类型的数据。

      目前见得比较多的是使用HttpClient来实现,代码大致如下:

String url = "*****";
HttpClient client = new HttpClient();    	    	
HttpMethod method = new GetMethod(url);
try {
    // Execute the method.
    int statusCode = client.executeMethod(method);
    if (statusCode != HttpStatus.SC_OK) {
        //输出
    }
    // Read the response body.
    byte[] responseBody = method.getResponseBody();
}
catch (HttpException e) {
    //异常输出
}
catch (IOException e) {
    //异常输出
}
finally {
    // Release the connection.
    method.releaseConnection();
}

 

      2、动态Script标签。

      由前端获取跨域的数据,好处在于不用经过服务器端,避免增加服务器端的压力。但是这种方法要求返回的数据是JSON格式,同时需要额外的处理避免浏览器垃圾回收出现问题(直译下面给出的链接中的语句)。

      http://neil.fraser.name/news/2009/07/27/这个链接给出了完整的解决方案。

      同时,一些JS框架也给出了自己的相应的解决方案。比如ExtJS,使用Ext.data.ScriptTagProxy来实现(API中有详细的使用方法),不过不清楚这个实现有没解决上面说到的垃圾回收问题,有时间再深入了解。

      3、隐藏Iframe。

      这个解决方案只能用在同一个父域的跨域中。

  经过上面的了解后,目前用第一种方式实现了跨域访问,不过准备把所有的实现修改为第二种,即动态Script标签的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值