日期:2014-05-16  浏览次数:21108 次

apache http server 解决跨域问题 与 修改响应内容

这篇文章转自自己的博客

?

通过服务器代理解决跨域问题是一种常见的解决js跨域的方法.
我这里以apache做例子,用apache http server(http://httpd.apache.org/docs/2.2/)当做代理服务器来实现跨域问题
相对于其他几种跨域方法的办法最大的好处是客户端代码不需要做大改动,甚至0改动,
其他大部分跨域解决方案cookie是无法带过去的,但通过这种方式可以做到cookie共享

例如我的网站http://onedear.cn,需要ajax访问http://www.163.com/getInfo这个接口
那只需要在apache的httpd.conf做如下url重写配置(相应的rewrite开关也要开)

?

RewriteEngine On
RewriteRule ^/163/(.*)    http://www.163.com/$1[P,L]
?

然后将请求地址从http://www.163.com/getInfo –> http://onedear.cn/163/getInfo
这样即可,cookie共享,跨域解决
同时apache支持的tps上万,一般情况下不会有相应的性能问题,放心使用

继续,apache的另一个利器–Filter
这个filter可以做到很多很多功能,修改请求内容,修改请求类型等,在这里写下他最好玩的一个功能,修改相应内容

例如,我的需求,要将返回的内容的onedear字符串改成od字符串
那只需要

<Location />
     AddOutputFilterByType SUBSTITUTE text/html
     Substitute "s|onedear|od|i"
</Location>

?

如果发现无法过滤,很可能相应网站做了gzip压缩,
启动
LoadModule deflate_module modules/mod_deflate.so
在filter增加INFLATE

AddOutputFilterByType SUBSTITUTE;INFLATE text/html
?

filter会自动对相应内容解压

有了这个功能就可以做很多其他事情了,例如可以做到在163.com网站引用自己的一个js并自动执行他,好玩吧.

另外提供一篇很好的关于js跨域总结的文章
http://ntesmailfetc.blog.163.com/blog/static/206287061201241011546581/

1 楼 java_user 2012-06-05  
这个解决方法不错
2 楼 cfan_haifeng 2012-06-05  
有备无患,记者了