首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册

正在浏览:   1 名游客





S跨域:利用apache的代理模块完美实现方法
网站管理员
注册日期:
1970/1/1 8:00
所属群组:
网站管理员
注册会员
帖子: 56
等级: 6; EXP: 34
HP : 0 / 133
MP : 18 / 19100
离线
正 文:
在做ajax互动效果时,我们需要利用Microsoft.XMLHTTP组件获取远程信息,但出于安全问题,javascript是不允许跨域的,只能在本域内操作数据。而这对于需要进行跨域获取数据的应用来说,无疑是一大障碍。

飘易在研究了众多可以实现js跨域的方法后,发现利用 apache 的proxy代理模块功能,就可以实现完美的js跨域处理了。特和大家分享如下:

1.首先要开启apache的rewrite重写模块和proxy代理模块。

修改apache配置文件 conf/httpd.conf ,去掉以下三行前边的#号
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
重启apache.

2.编写rewrite规则,在当前目录里的.htaccess文件里加入以下语句:

RewriteEngine on
RewriteBase /
RewriteRule ^call-(.*)$ http://www.piaoyi.org/s?wd=$1 [L,R,P,NC]

需要注意的是RewriteRule 后边的重写规则参数
L 立即停止重写操作,并不再应用其他重写规则。
R 是强制外部重定向,因为是要跨域定向到外部域,所以必须有R
P 是强制使用代理转发,这个也是必须的.
NC 是不区分大小写,这个倒是可选,但是为了增加兼容性,最好还是加上.(参考)

做完以上工作后,就基本OK了。现在可以尝试用ajax请求 http://127.0.0.1/call-key 会发现得到的数据是apache已经重新定向了的 http://www.piaoyi.org/s?wd=key 的数据。

这种方式实现的js跨域飘易认为是比较完美的。但需要你有服务器权限,才可以开启 apache配置文件 conf/httpd.conf 的代理模块,重写模块一般的服务器都是开启的。

下面飘易再公布一段利用这个js跨域的方法实现的ajax代码:






以上就是比较全面的方法了(注意 js 是区分大小写的)。但是飘易现在遇到一个问题,就是使用apache的代理模块和重写模块后,我没有实现的功能是: “http://localhost/call-你好” 如果重定向里有汉字,就无法实现重定向了,错误代码如下:
“Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /call-???.
Reason: DNS lookup failure for: www.piaoyi.org

如果对汉字进行url编码,如编码成 http://localhost//call-%BA%C3 ,RewriteRule规则识别不了百分号 %,apache会返回 :“403 Forbidden You don't have permission to access /call- 好
on this server”错误。飘易猜测这是编码问题。暂时留在这,如果哪位大侠有解决方法,请不吝赐教。
作者:flymorn
来源:Flymorn

2011/4/11 14:55
应用扩展 工具箱






可以查看帖子.
不可发帖.
不可回复.
不可编辑自己的帖子.
不可删除自己的帖子.
不可发起投票调查.
不可在投票调查中投票.
不可上传附件.
不可不经审核直接发帖.

[高级搜索]



系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号