正文

HTTP透明代理原理简介(转)2008-02-14 11:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lost/32654.html

分享到:

最近,国外网络比较缓慢,为了提高浏览国外网页的速率,就顺手配置个HTTP代理服务器,当然不能强制所有人都手动设置代理,所以选择搭建HTTP透明代理。在此方面squid应该是首选,功能强大,性能强劲。可关键是如何实现透明代理,以前在网上所遇到的基本上都是用于HTTP服务器加速的反向透明代理,当然不能适用于当前环境下。初始的想法是在网关上实现一个HTTP请求重写的程序,用它截获HTTP连接,重写其请求为代理服务器要求的格式,然后转发其请求到squid代理。当思考如何实现这个功能的时候,猛然间想到当前流行的HTTP 1.1请求中有Host字段,代表想要连接到的HTTP虚拟主机,也正是这个Host字段,使得HTTP服务器能够实现虚拟主机功能,所以完全可以根据此字段结合HTTP命令(如GET,POST等)中的相对URL字段构造出完整的URL,大多数情况下根本没有必要知道做DNAT转换之前的目的地址和端口,即使需要,也只是作为参考备份而存在。下面是我访问http://www.kernel.org的TCP数据流的HTTP请求和响应头: GET / HTTP/1.1 Host: www.kernel.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.8.1.1) Gecko/20070107 BonEcho/2.0.0.1 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: zh-cn,en-us;q=0.8,en;q=0.5,zh;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: gb18030,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive  HTTP/1.1 200 OK Date: Thu, 18 Jan 2007 14:26:28 GMT Server: Apache/2.2.2 (Fedora) Accept-Ranges: bytes Keep-Alive: timeout=5, max=1000 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html从以上信息不难拼凑出完整的URL: http://www.kernel.org/。由此得出结论,对于HTTP协议,一般从应用层就能实现透明代理。先不用急着写程序,几乎可以肯定我不是第一个发现这个的人,不妨先窥视一下squid的透明代理实现。果真不出所料,squid正是那样做的,看来我也只能当个二手科学家。无奈squid的配置选项繁多,在结合源码的情况下,最终跌跌撞撞地配置好了透明代理,效果不错。

阅读(5748) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册