1.Web的中间实体
Web上的代理服务器是代表客户端完成事务处理的中间人。HTTP的代理服务器既是Web服务器又是Web客户端。
1.1.私有和共享代理
#1.公共代理
大多数代理都是公共的共享代理,汇入同一个代理服务器的用户越多,它越有用。
#2. 私有代理
不常见,一般直接运行在客户端计算机上,扩展特性,提供性能。
1.2.代理与网关的对比
严格来说,代理连接的是俩个或多个使用相同协议的应用程序,而网关连接的是俩个或多个使用不同协议的端点。网关演绎“协议转换器”的角色。
2.为何使用代理
可以改善安全性,提高性能,节省费用。
可以监视流量,并对其进行修改,以实现很多有用的增值Web服务。
#1:儿童过滤器
可以利用过滤器代理,允许无限制访问教育性内容,但对于不适合儿童的站点要强行禁止访问。
#2:文档访问控制
代理服务器在大量Web服务器和Web资源之间实现统一的访问策略,创建审核跟踪机制。
在集中式代理服务器上可以对所有访问控制功能进行配置,则无需在众多由不同组织管理、不同厂商制造、使用不同模式的Web服务器进行经常性的访问控制升级。
#3:安全防火墙
代理服务器可以在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织,还可以提供消除病毒的Web和E-mail代理使用的那种挂钩程序,以便对流量进行详细的检测。
#4:Web缓存
代理缓存维护了常用文档的本地副本,按需提供,减少缓慢且昂贵的通信。
>客户端1和客户端2会去访问附件Web缓存上的对象A,而客户端3和客户端4访问的则是原始服务器上的文档。
#5:反向代理
代理可以假扮Web服务器。这些被称为替代物或反向代理的代理接收发给Web服务器的真实请求,但是与Web服务器不同的是,他们可以发起通信,以便按需定位所请求的内容。
提供访问慢速Web服务器上公共内容时的性能,常被称为服务器加速器。还可以将替代物与内容路由功能配合使用,以创建按需复制内容的分布式网络。
#6:内容路由器
根据流量状况以及内容类型将请求导向特定的Web服务器,还可以用来实现各种服务级的请求。
#7:转码器
代理服务器在将内容发送给客户端前,可以修改内容的主体格式。
#8:匿名者
匿名者代理会主动从HTTP报文中删除自身特性(客户端的IP地址、From首部、Referer首部、cookie、URI的会话ID),提高私密性和匿名性。
3.代理部署
3.1.代理位置
#1:出口代理
固定在本地网络的出口点,控流;也可以提供防火墙保护,或降低带宽费用,提高流量的性能。
#2:访问(入口)代理
放在ISP访问点上,用来处理来自客户端的聚合请求。ISP使用缓存代理来存储常用文档的副本,以提高用户的下载速度,降低带宽耗费。
#3:反向代理
部署在网络边缘,作为Web服务器的替代物,处理所有传送给Web服务器的请求,并只在必要时向Web服务器请求资源。
#4:网络交换代理
具有足够处理能力的代理放在网络之间的Internet对等交换点上,通过缓存来减轻Internet节点的拥塞,并对流量进行监视。
3.2.代理的层次结构
代理的层次结构将代理级联起来。
层次不一定是静态的,可以根据不同的情况选择不同的代理转发。
>若是付费请求内容,代理会分发到附近的一个缓存服务器,这个服务器会返回缓存对象,若没有,则去取内容。
>请求特定类型的图片,访问代理转发给压缩代理,压缩代理获取图片,进行压缩,客户端下载时会速度快一点。
还有以下动态层次:
#1:负载均衡
子代理根据当前父代理的工作负载级别来决定如何选择一个父代理,以均衡负载。
#2:地理位置附件的路由
子代理可能会选择负责原始服务器所在物理区域的父代理。
#3:协议/类型路由
可能会根据URI将报文转发到不同的父代理和原始服务器上去。
#4:基于订购的路由
可以额外付费,URI会转发到大型缓存或压缩引擎上去,以提高性能。
3.3.代理如何获取流量
使客户端流量流向代理有4中常见方式:
#1:修改客户端
很多客户端都支持手工和自动的代理配置,将HTTP请求有意地直接发送给代理,而不是原始服务器。
#2:修改网络
依赖于监视HTTP流量的交换设备及路由设备,在客户端毫不知情下,拦截流量并将其导入代理,被称为拦截代理。
#3:修改DNS的命名空间
Web服务器的替代物。手工编辑DNS名称列表,或者用特殊的动态DNS服务器根据需要来确定适当的代理或服务器。
#4:修改Web服务器
Web服务器向客户端发送HTTP重定向(305),将客户端请求重定向代一个代理上去。收到重定向后,客户端会与代理进行通信。
4.客户端的代理设置
4.1.手工配置
4.2.代理的自动配置(PAC)
function FindProxyForURL(url , host){
if (url.substring(0 , 5) == "http:" ) {
return "PROXY http-proxy.mydomain.com:8080";
} else if (url.substring(0 , 4) == "ftp:" ){
return "PROXY http-proxy.mydomain.com:8080";
} else {
return "DIRECT";
}
}
4.3.WPAD的代理发现
5.一些棘手问题
5.1.代理URI与服务器URI的不同
GET /index.html HTTP/1.0
User-Agent:SuperBrowser v1.3
但客户端想代理发送请求时,请求行中则包含完整的URI:
GET http://www.dawn.com/index.html HTTP/1.0
User-Agent:SuperBrowser v1.3
代理出现之后,使用部分URI就有问题了。代理需要知道目标服务器的名称,才能建立自己与服务器的连接。
#1:没有设置客户端使用代理时,它会发送部分URI;
5.2.虚拟主机的问题
5.3.拦截代理会收到部分URI
5.4.代理既可以处理代理请求,也可以处理服务器请求
5.5.转发过程中对URI的修改
5.6.没有代理时的URI解析
5.7.有显式代理时URI的解析
5.8.有拦截代理时URI的解析
6.追踪报文
6.1.Via首部
Via: 1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com
上面说明了,途径了第一个代理proxy-62.irenes-isp.net,实现了HTTP/1.1;第二个代理cache.joes-hardware.com实现了HTTP/1.0。
6.1.3.Via与网关
Via: FTP:/1.0 proxy.irenes-isp.net (Traffice-Server/5.0.1-17882 [cMs f ])
Server: Netscape-Enterprise/4.1
Server: Microsoft-IIS/5.0
Via: 1.0 foo, 1.1 devirus.company.com, 1.1 access-logger.company.com
压缩成:
Via: 1.0 foo, 1.1 concealed-suff