Http代理协议
一、Http代理概述
1.1 Http代理产生的背景
当出现以下四种情况时需要用到Http代理服务器:
(1)单位或家庭共用一个网络IP。这样就必须将某台机器作为主服务器,而别的机器都通过这台服务器中转才能访问到Internet。
(2)某些WWW服务器限制了访问者的IP 范围。如果别的机器要想访问到这种WWW服务器, 就需要通过能访问到该WWW服务器的主机中转。
(3)有些网络IP 被限制到只能访问某些网络IP。如果这些主机要访问到限定范围外的WWW服务器,就必须通过限定范围内的主机中转。
(4)访问者想隐藏自己的源IP。这样访问者就必须通过别的机器中转访问服务器才能达到隐藏自己的源IP 的目的。
1.2 什么是Http代理
Http代理是一个中间程序,它既可以担当客户端角色,也可以担当服务器角色。代理代表客户端向服务器发出请求。客户端的请求经过代理,会在代理内部得到服务或者经过一定的转换转至其他服务器。一个代理必须能同时实现本规范中对客户端和服务器所做出的要求。透明代理需要代理认证和代理识别,而不修改请求或响应。非透明代理需要修改请求或响应,以便为用户代理提供附加服务,如:注释服务,媒体类型转换,协议简化,或者匿名过滤等。除非透明行为或非透明行为被显式地声明,否则,Http代理即是透明代理也是非透明代理。
二、Http代理的用途
2.1翻墙
很多人都喜欢用Facebook,看youTube。但是我国有The Great of Wall(长城防火墙),屏蔽了这些网站。通过Http代理服务器来跳墙可以实现绕过长城防火墙访问这些被屏蔽掉的网站,这就是所谓的翻墙。如图2.11所示。
图 1 利用代理服务器翻墙示意图
2.2匿名访问
Http代理服务器的匿名性是指:Http代理服务器通过删除Http报文中的身份特性(比如客户端的IP地址,或cookie,或URI的会话ID),从而对远端服务器隐藏原始用户的IP地址以及其他细节。同时Http代理服务器上也不会记录原始用户访问记录的log(否则也会被查到)。
2.3加快上网速度
大部分代理服务器都具有缓存的功能,就好像一个大的cache,它有很大的存储空间,它不断将新取得数据存储到它本地的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传给用户的浏览器,这样就能显著提高浏览速度。
2.4儿童过滤器
Http代理服务器还可以通过控制从服务器端接收到的数据来限制客户端浏览的内容,从
而实现某些不良内容对儿童屏蔽的效果。
图 2 代理服务器的儿童过滤器效果示意图
三、Http代理的实现形式
3.1基于GET、POST方法的代理
当客户端是用通常的代理模式时( 即使用GET 或者POST 方法发出请求) ,在客户端同代理服务器建立连接后,代理服务器将收到请求命令,这时代理服务器应该截取主机名部分进行域名解析,并同该主机建立连接,将去掉主机名部分的请求命令转发给它,等待它做出响应,然后将得到的响应转发给客户端,最后断开连接。其工作如图3 所示。
图3 带有缓存数据库的Http协议代理工作过程
注: 1.客户连接代理服务器,并发出客户请求;
2.在本地缓存中无此资源时, 连接到Internet;
3.从Internet 上获得所请求的资源;
4.将客户所请求的资源发送给客户;
2′.代理服务系统检索缓存数据库;
3′.若请求的资源在数据库中,则将请求的资源发给代理服务器;
而由于GET 和POST 方法是工作在Http本层内,对代理服务器而言,接受或发送的数据都是可以理解的,这样它就可以将服务器应答的网页信息存储起来,当再有相同请求的时候,代理就可以快速的将客户端所需内容发送给客户端了。这个方法极大的提高了代理服务器的效率。
3.2基于CONNECT方法的代理
在Http中,还有一种隧道代理方式,那就是使用CONNECT方法来请求并建立隧道。CONNECT方法请求代理代表它建立一个连接通道。请求命令行的请求URI 部分总是指明请求连接的目的主机名和端口号。
在代理服务器作出成功的响应后,由客户端到服务器的隧道就被建立起来了。这种代理方式实际上是工作在应用层之下,因此代理服务器并不能对客户端与服务器发送来的数据进行理解,而只是简单的转发,所以基于CONNECT方法的代理方法不能进行缓存,但是它能够进行级联,也就是可以连接到下一个代理服务器进行中转。
四、Http代理实验过程
4.1实验环境搭建
下载CCProxy7.2代理服务器,安装并配置。在这里把ip地址为192.168.199.230的地址作为代理服务器的ip地址,将为ip地址为192.168.199.234的客户提供代理服务。其主要设置如图
并添加用户,设置ip为192.168.199.234,为其提供代理服务。
在客户端IE浏览器Internet选项里的设置里的连接里的局域网设置按下图配置。使用ip为192.168.199.230的服务器做代理服务。
之后在客户端登录百度网站,在代理服务器端和客户端分别用wireshark抓包进行分析。
4.2 实验分析
省略掉建立连接等其他过程,提炼主要关于http代理服务的报文。客户端如下,可以看到其http协议的get请求发给了代理服务器192.168.199.230。同时http响应报文也从192.168.199.230发到了客户端。
在代理服务器端进行抓包分析,如下图。可以看到他接受到192.168.199.234的http协议get百度网站的请求。其将域名解析后得到ip地址(此过程报文省略),将来自
192.168.199.234的请求报文发给了61.135.185.194服务器地址。接受到http响应报文中的html和其中脚本文件将其缓存,发送给客户端http响应。