Ajax通过代理跨域访问

 

    Ajax调用远程服务器数据会出现拒绝访问的问题。这是因为基于安全的考虑,AJAX只能访问本域下的资源,而不能跨域访问。也就是说,domain1.com站点中的AJAX只能访问domain1.com站点下的资源,而不能跨域访问domain2.com站点中的资源,这就是AJAX跨域问题。

    解决思路:页面在提交请求时,浏览器会进行Form身份验证(Form即为表单,每个页面都有一个Form标签),像不同域数据的获取就被认为是不安全的,所以拒绝访问。解决思路就是通过这个Form身份验证,或绕过身份验证。

    解决AJAX跨域问题有几种方法,这里我们只讨论最常用的一种方法---使用AJAX代理解决AJAX跨域问题。 即在domain1.com站点中使用动态网页(ASP,PHP,JSP等)作为代理页面读取domain2.com站点中的资源, 然后在domain1.com站点中使用AJAX读取本域下的代理页面。

    举例说明(以asp.net为例):页面a.aspx在域domain1.com中,页面b.aspx在域domain2.com中,a.aspx通过ajax请求b.aspx数据

则为跨域。在域domain1.com放置代理页面temp.aspx,那么a.aspx访问temp.aspx就是同一域了。而temp.aspx再去访问b.aspx返回数据给a.aspx,这样问题是不是已经解决了呢,temp.aspx访问b.aspx不也是跨域访问吗?

    这就是重点:a.aspx访问temp.aspx发送请求时已通过Form身份验证了,请求已到达服务器端,而temp.aspx在服务器端访问获取b.aspx的数据则不存在Form身份验证,所以代理页面temp.aspx代码应该运行在服务器端,也就是将获取数据的代码写到temp.cs当中即可。

 

示例(部分重要源码):

 

1、域domain1.com中的a.aspx通过Ajax请求代理页面NetProxy.aspx(有参数与无参数的两种请求方法)

2、域domain1.com中代理页面NetProxy.aspx(后台代码)

 

其中// 需要请求数据的页面地址
        StringBuilder str_ServerUrl = new StringBuilder("http://domain2.com/b.aspx");这句代码就是定义domain2.com中国b.aspx的绝对地址,请根据实际需求自己更改。本实例中是"http://localhost/WebService/CallWebService/ResponseData/GetValue.aspx",自己测试使用。

 

3、域domain2.com中b.aspx页面代码:

代码仅供参考,请自己根据实际情况编写。

详细源码下载地址:http://download.csdn.net/source/2094079

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值