什么是代理呢?表面上这个东西对普通用户来说有些遥远,其实很多时候我们都是用着代理而不自知,例如翻墙软件,游戏加速器,有的时候浏览器也会自带代理。代理就是位于客户端与服务器之间,完成事务的中间人。代理既可以看做是客户端又可以看成是服务器,因为对真正的web客户单来说,代理扮演着服务器的角色,接收请求报文,返回响应报文,对于web服务器来说,代理扮演的是客户端的角色,发送web请求,接收web响应。
代理可以分为公有代理和私有代理,大多数的代理是公有代理,集中式的代理效率高,管理方便,某些代理的功能如高速缓存,会利用用户的共同的请求,所以使用的用户越多,代理越高效。私人代理一般很少见,我们可能接触到的例如浏览器自带的本地代理,用来提高性能,或者完成一些特定的功能。
代理和网关
严格的来说,代理连接的是两个或多个使用同样协议的程序,而网关连接的是连接两个或多个不同协议的程序,网关负责的是协议的转换。例如我们使用网页登陆qq邮箱的时候,就会使用到http/pop的网关完成协议的转换。当然现在代理与网关的界限已经十分模糊了,有些代理已经具备了一些网关的功能。
为什么要使用代理
代理有非常多种类的功能,下面列出一些比较常见的功能:
- 内容过滤。例如过滤一些少儿不宜的网站等等
- 文件访问控制。在集中式管理中,可以对客户端的访问行为进行控制,在企业中很常见。
- 防火墙。通过在内网和外网或者内网之间设立代理服务器,对网络流量进行监控。
- web缓存。这是个比较重要的功能,例如我现在在北京,想要访问美国服务器上的资源,直接访问的肯定会消耗很多的时间。如果我们使用的代理缓存中有之前其他人访问时留下的副本,而且没有过期,那么代理就直接可以将该副本返回给我,而不用再耗费时间去访问美国服务器的资源。
- 反向代理。代理可以假扮服务器,用户的请求会先发送到假扮服务器的反向代理上,然后反向代理根据一些判断规则将请求分发到特定服务器,或者直接将缓存中的数据返回。主要作用是性能优化和负载平衡等。
- 内容路由器。可以用来实现各种服务级的请求,比如如果用户或内容提供者付费要求更高的性能,内容路由器便可以将请求转发到附近的复制缓存中。
- 转码器。代理服务器在将内容发送给客户端之前,可以修改内容的格式,这种表示法之间进行的透明转换被称为转码。例如服务器返回的是gif图片,转码代理可以讲其转换为jpeg格式,以此来减小尺寸。
- 匿名。有些时候,我们不希望服务器获得我们客户端的信息,代理服务器可以再转发请求的时候将客户端的ip地址,from首部,referer首部,cookie,uri会话的id等从请求中去掉,从而实现匿名。
代理在哪里
说了这么多,那么代理一般都处于网络中的哪些位置呢?
- 出口代理。代理位于网络的出口,以便控制本地网络与外部网络之间的流量,公司学校中很常见。
- 访问代理。代理被放在isp的访问点上,用来聚合用户请求,利用缓存来提高用户访问效率。
- 反向代理。位于网络边缘,在服务器之前,代替服务器先对请求进行第一步处理。
- 网络交换代理。将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存减轻因特网的拥塞,同时对流量进行监视。
代理可以通过层次结构连接起来,一般的来说,一个报文可能经过很多个代理最终才会到达目的地,这时,会成靠服务器比较近的代理是邻接代理的父代理,同样邻接代理也是这个代理的子代理。例如:
代理1是代理2的子代理,代理2是代理1的父代理。
当然代理之间的结构不全都是静态的,也会存在动态的关系。当代理接收到请求或者响应时,会根据报文的内容对下一个代理或者服务器进行动态的判断,选择最符合条件的目标进行转发。他们通常会用来实现这些目的:
- 负载平衡
- 地理位置比较近的路由
- 协议/类型路由。某些特殊的uri可能需要特殊的代理进行转发,那么就会发送到这些特殊代理上
- 基于订购的路由。如果发布者付费了,那么就将其转发到高性能的代理服务器进行压缩或者缓存上,提高性能。
代理服务器如何获取流量
说道这里,我们还不知道代理服务器如何获取用户的流量,方法基本上有以下四种:
- 修改客户端。在浏览器内设置代理服务器。
- 修改网络。在网络中动手脚,例如公司学校中内网与外网之间的代理服务器,对所有进出的流量进行拦截分析,一般对用户来说都是透明的。
- 修改dns的命名空间。我们知道,当访问一个url的时候,我们需要先使用dns服务器对url进行解析,以获得服务器的ip。如果dns服务器提供的是反向代理的ip,那么流量便会直接发送往代理。
- 修改web服务器。当web服务器接收到请求的时候,可以回送一个重定向报文,将客户端重定向到代理服务器上。
以上就是代理的大体知识,之后的章节会详细的说明一些代理的小细节,大家新年快乐:-d