令人头疼的Cross-Domain AJAX

最近想写一个基于AJAX的应用,不过和以往不一样的是,我想直接请求一个外部网站地址(比如某Blog的RSS地址),用外部网站的返回来做这个AJAX应用。于是,我开始动手了,在本地写了一个简单的页面,直接使用的jQuery的AJAX请求。在Firefox里面打开页面,没反映,到是Firefox的console报错了,从没见过的奇怪错误。Google一下,才知道这是因为我调用了跨域的XMLHttpRequest,这是不被允许的。Faint!

Cross Domain AJAX主要就是A.com网站的页面发出一个XMLHttpRequest,这个Request的url是B.com,这样的请求是被禁止的。关于 Cross Domain AJAX的安全问题现在还在被大家讨论着。不过就目前的情况来看,一定要靠一些非常规手段来解决这个问题了。当前比较流行的解决方法主要有下面几种:

  • 跨域代理(Cross Domain Proxy)。主要原理就是用php或者其他语言写一个代理请求的转发过程。客户端请求自己的服务器,服务器把请求转发到目标地址并且得到回应,服务器再 把结果返回给客户端。这个过程,对于开发者来说还是不错的选择,因为你可以在服务器上对回应的结果做自己的处理,可以决定需不需把结果要返回给客户端。

  • JSON+动态添加脚本标签(JSON+Dynamic Script Tag)。实现的主要原理是,远端服务器返回的不是XML格式的数据,而是JSON格式的数据。而客户端发出请求的过程,其实是在页面动态的增加一个诸如 <script src="”请求地址”" type="text/javascript"></script> 标签,这个过程会把请求到的那个js文件跑一边,利用这点特性,我们动态的得到了数据。 (JSON and the Dynamic Script Tag: Easy, XML-less Web Services for JavaScript

  • 使用Flash来跨域请求。 有人想出在本地增加一个Flash文件,靠Flash文件来请求跨域的资源。具体方法可以看( Cross-domain AJAX using FlashFlash to the Rescue)。我尝试了一下,不过发现这种方式的请求需要远端服务器上有一个crossdomain.xml文件,这个文件用来描述可访问本资源的网站。

第一种方法只要在发起请求端有所改变就能实现跨域,而后两种都需要同时在发起请求端和回复请求端做点事情才能实现。第一种方式比较简单,对于已有的 系统改动不大。但是,第二中方式却是现在的发展趋势,不可小视。不过在我目前的状况(只能纯写HTML+JS,没有其他权限)下,看上去对跨域是无能为力 了……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值