第六章:代理

Web代理(proxy)服务器是网络的中间实体。代理位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文。

6.1.1 私有和共享代理
代理服务器可以是某个客户端专用的,也可以是很多客户端共享的。单个客户端专用的代理被称为私有代理。众多客户端共享的代理被称为公共代理。
·公共代理
大多数代理都是公共的共享代理。集中式代理的费效比更高,更容易管理。某些
代理应用,比如高速缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。
·私有代理
专用的私有代理并不常见,但它们确实存在,尤其是直接运行在客户端计算机上的时候。有些浏览器辅助产品,以及一些ISP服务,会在用户的PC上直接运行一些小型的代理,以便扩展浏览器特性,提高性能,或为免费ISP服务提供主机广告。


image.png

6.1.2代理与网关的对比
严格来说,代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。
图6-2显示了代理和网关之间的区别。
·图6-2a中的中间设备是一个HTTP代理,因为代理与客户端和服务器之间使用的都是HTTP协议。
·图6-2b中的中间设备是一个 HTTP/POP网关,因为它把HTTP的前台与POP
E-mail 的后端连接了起来。网关将Web事务转换成适当的POP事务,这样用户就可以通过HTTP读取E-mail了。基于Web的E-mail程序,比如Yahoo!邮件和MSN Hotmail都是HTTP E-mail网关。

image.png

实际上,代理和网关之间的区别很模糊。由于浏览器和服务器实现的是不同版本的HTTP,代理也经常要做一些协议转换工作。而商业化的代理服务器也会实现网关的功能来支持SSL安全协议、SOCKS防火墙、FTP访问,以及基于Web的应用程序。我们将在第8章详细介绍网关。
6.2为什么使用代理
代理服务器可以实现各种时髦且有用的功能。它们可以改善安全性,提高性能,节省费用。代理服务器可以看到并接触到所有流过的HTTP流量,所以代理可以监视流量并对其进行修改,以实现很多有用的增值Web服务。这里给出了几种代理使用方法的示例。
·儿童过滤器
小学在为教育站点提供无阻碍访问的同时,可以利用过滤器代理来阻止学生访问成人内容。如图6-3所示,代理应该允许学生无限制地访问教育性内容,但对不适合儿童的站点要强行禁止访问。'
·文档访问控制
可以用代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略,创建审核跟踪机制。这在大型企业环境或其他分布式机构中是很有用的。在集中式代理服务器上可以对所有访问控制功能进行配置,而无需在众多由不同组织管理、不同厂商制造、使用不同模式的Web服务器上进行经常性的访问控制升级。


image.png

·反向代理
代理可以假扮Web服务器。这些被称为替代物(surrogate)或反向代理(re-verse proxy)的代理接收发给Web服务器的真实请求,但与Web服务器不同的是,它们可以发起与其他服务器的通信,以便按需定位所请求的内容。
可以用这些反向代理来提高访问慢速Web服务器上公共内容时的性能。在这种配置中,通常将这些反向代理称为服务器加迷器(server accelerator)(参见图6-7)。还可以将替代物与内容路由功能配合使用,以创建按需复制内容的分布式网络。

6.3.1代理服务器的部暑
可以根据其目标用途,将代理放在任意位置。图6-11给出了部署代理服务器的几种方式。
· 出口代理
可以将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量。可以在公司网络中使用出口代理(参见图6-11a),提供针对公司外部恶意黑客的防火墙保护,或降低带宽费用,提高因特网流量的性能。小学可能会使用过滤出口代理来防止早熟的学生浏览不恰当的内容。
·访问(入口)代理
代理常被放在ISP访问点上,用以处理来自客户的聚合请求。ISP使用缓存代理来存储常用文档的副本,以提高用户(尤其是高速连接用户)的下载速度,降低因特网带宽耗费(参见图6-11b)。
·反向代理
代理通常会被部署在网络边缘,在Web服务器之前,作为替代物(也常被称为反向代理,参见图6-11c)使用,在那里它们可以处理所有传送给Web服务器的请求,并只在必要时向Web服务器请求资源。替代物可以提高Web服务器的安全特性,或者将快速的Web服务器缓存放在较慢的服务器之前,以提高性能。反向代理通常会直接冒用Web服务器的名字和IP地址,这样所有的请求就会被发送给代理而不是服务器了。
·网络交换代理
可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监视,参见图6-11d。3
6.3.3代理是如何获取流量的
客户端通常会直接与Web服务器进行通信,所以我们要解释清楚HTTP流量怎样才能首先流向代理。有四种常见方式可以使客户端流量流向代理。
·修改客户端
很多Web客户端,包括网景和微软的浏览器,都支持手工和自动的代理配置。如果将客户端配置为使用代理服务器,客户端就会将HTTP请求有意地直接发送给代理,而不是原始服务器(参见图6-14a)。
·修改网络
网络基础设施可以通过若干种技术手段,在客户端不知道,或没有参与的情况下,拦截网络流量并将其导入代理。这种拦截通常都依赖于监视HTTP流量的交换设备及路由设备,在客户端毫不知情的情况下,对其进行拦截,并将流量导入一个代理(参见图6-14b)。这种代理被称为拦截(intercepting)代理。6

6.4 客户端的代理设置
所有现代的Web浏览器都允许用户对代理的使用进行配置。实际上,很多浏览器都提供了多种配置代理的方式,其中包括以下几种。
148 !第6章
·手工配置
显式地设置要使用的代理。·预先配置浏览器
浏览器厂商或发行商会在将浏览器发送给其客户之前预先对浏览器(或所有其他Web客户端)的代理设置进行手工配置。
·代理的自动配置(Proxy Auto-Configuration,PAC)
提供一个 URI,指向一个用JavaScript语言编写的代理自动配置文件,客户端会取回这个JavaScript文件,并运行它以决定是否应该使用一个代理,如果是的话,应该使用哪个代理服务器。
.WPAD的代理发现
有些浏览器支持Web 代理自动发现协议(Web Proxy Autodiscovery Protocol,WPAD),这个协议会自动检测出浏览器可以从哪个“配置服务器”下载到一个自动配置文件。
6.5.1代理URI与服务器URI的不同
除了一点之外,Web服务器报文和Web代理报文的语法是一样的。客户端向服务器而不是代理发送请求时,HTTP请求报文中的URI会有所不同。

6.5.6URI的客户端自动扩展和主机名解析
根据是否有代理,浏览器对请求URI的解析会有所不同。没有代理时,浏览器会获取你输入的URI,尝试着寻找相应的P地址。如果找到了主机名,浏览器会尝试相应的IP地址直到获得成功的连接为止。
但是,如果没有找到主机,很多浏览器都会尝试着提供某种主机名自动“扩展”机制,以防用户输入的是主机“简短”的缩写形式(回顾一下2.3.2节)。"
·很多浏览器会尝试着加入前缀www.和后缀.com,以防用户只输入了常见 Web站点名的中间部分(比如,人们可以输入yahoo而不是 www.yahoo.com)。
·有些浏览器甚至会将未解析出来的URI传递给第三方站点,这个站点会尝试着校正拼写错误,并给出一些用户可能希望访问的URI建议。
·而且,大多数系统中的DNS配置允许用户只输入主机名的前缀,然后 DNS会自动搜索域名。如果用户位于域名oreilly.com的范围之内,并输入了主机名host7,DNS会自动尝试将其与host7.oreilly.com进行匹配。这并不是完整有效的主机名。

6.5.7没有代理时URI的解析
图6-16显示了一个在没有代理的情况下,浏览器进行主机名自动扩展的例子。在第(2a)~ (3c)步中,浏览器会去查找各种主机名,直到找到一个有效主机名为止。


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容