第二部分 HTTP结构——第6章代理

Web代理的定义

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

代理分类

1.公共代理

大多数代理都是公共的共享代理。集中式代理的成本效率更高,更容易管理。某些代理应用,比如高速缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。

2.私有代理

专用的私有代理并不常见,但它们确实存在,尤其是直接运行在客户端计算机上的时候。有些浏览器辅助产品,以及一些ISP服务,会在用户的PC上直接运行一些小型的代理,以便扩展浏览器特性,提高性能,或为免费ISP(Internet Service Provider)服务提供主机广告。

代理与网关的对比

  1. 严格来说,代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。
  2. 网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。
图例显示代理和网关区别

代理和网关

邮件协议的英文解释

POP
Post Office Protocol (POP) means that all of your email is downloaded from your Internet Service Provider to your own personal computer and (usually) deleted from the server. If you created folders in your email program, those folders are only accessible on your own personal computer.

IMAP
Internet Message Access Protocol (IMAP) means that all of your email is saved on your Internet Service Provider’s servers. If you are using IMAP, you can run an email program at home and an email program at work and both programs will access the same set up messages and folders. If you only use webmail to check your mail, your are using IMAP.

使用代理的优点

  1. 改善安全性
  2. 提高性能
  3. 节省费用

使用代理的方法示例

1.儿童过滤器
2.文档访问控制

可以用代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略,创建审核跟踪机制。

在集中式代理服务器上可以对所有访问控制功能进行配置,而无需在众多由不同组织管理、不同厂商制造、使用不同模式的Web服务器上进行经常性的访问控制升级。

集中式访问控制代理示例图

  • 允许客户端1无限制地访问服务器A的新闻页面;
  • 客户端2可以无限制地访问因特网;
  • 在允许客户端3访问服务器B之前,要求其输入口令。

访问控制

3.安全防火墙

网络安全工程师通常会使用代理器来提高安全性。代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织。还可以提供用来消除病毒的Web和E-mail代理使用的那种挂钩程序,以便对流量进行详细的检查。
安全防火墙

4.Web缓存

代理缓存维护了常用文档的本地副本,并将它们按需提供,以减少缓慢且昂贵的因特网通信。

5.反向代理

代理可以假扮Web服务器。这些被称为替代物反向代理的代理接收发给Web服务器的真实请求,但与Web服务器不同的是,它们可以发起与其他服务器的通信,以便按需定位所请求的内容。
反向代理

6.内容路由器

代理服务器可以作为“内容路由器”使用,根据因特网流量状况及内容类型将请求导向特定的Web服务器。这个其实和Web缓存有点类似。

内容路由器也可以用来实现各种服务级别的请求。

7.转码器

代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码。
转码
图例显示了,这个代理可以将英语文本转换成西班牙文本,将HTML页面重新格式化为较简单的文本,以便显示在手机的小屏幕上。

8.匿名者

匿名者代理会主动从HTTP报文中删除身份特性(比如客户端IP地址、From首部、Referer首部、cookie、URI的会话ID),从而提供高度的私密性和匿名性。
匿名者
图例中,匿名代理会对用户报文进行下列修改以增加私密性。

  • 从User-Agent首部删除用户的计算机与OS类型。
  • 删除From首部以保护用户的E-mail地址。
  • 删除Referer首部来掩盖用户访问过的其他站点。
  • 删除Cookie首部以剔除概要信息和身份的数据。

代理服务器部署

可以根据其目标用途,将代理放在任意位置。如下:

1.出口代理

可以将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量。

2.访问(入口)代理

代理常被放在ISP访问点上,用以处理来自客户的聚合请求。ISP使用缓存代理来存储常用文档的副本,以提高用户(尤其是高速连接用户)的下载速度,降低因特网带宽耗费。

3.反向代理

代理通常会被部署在网络边缘,在Web服务器之前,作为替代物(反向代理)使用,在那里它们可以处理所有传给Web服务器的请求,并只在必要时向Web服务器请求资源。替代物可以提高Web服务器的安全特性,或者将快速的Web服务器缓存放在较慢的服务器之前,以提高性能。反向代理通常会直接冒用Web服务器的名字和IP地址,这样所有的请求就会被发送给代理而不是服务器了。

4.网络交换代理

可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监控。

在这里插入图片描述

代理的层次结构

Proxy层次结构中的代理服务器被赋予了父(parent)和子(child)的关系。下一个入口(inbound)代理(靠近服务器)被称为父代理,下一个出口(outbound)代理(靠近客户端)被称为子代理。

动态选择父代理示例
1.负载均衡

子代理可能会根据当前父代理上的工作负载级别来决定如何选择一个父代理,以均衡负载。

2.地理位置附近的路由

子代理可能会选择负责原始服务器所在物理区域的父代理。

3.协议/类型路由

子代理可能会根据URI将报文转发到不同的父代理和原始服务器上去。某些特定类型的URI可能要通过一些特殊的服务器转发请求,以便进行特殊的协议处理。

4.基于订购的路由

如果发布者为高性能服务额外付费了,它们的URI就会被转发到大型缓存或压缩引擎上去,以提高性能。

代理流量的获取

1.修改客户端

很多Web客户端,包括网景和微软的浏览器,都支持手工和自动的代理配置。如果将客户端配置为代理服务器,客户端就会将HTTP请求有意地直接发送给代理,而不是原始服务器。

2.修改网络

网络基础设施可以通过若干种技术手段,在客户端不知道,或没有参与的情况下,拦截网络流量并将其导入代理。这种拦截通常都依赖于监视HTTP流量的交换设备及路由设备,在客户端毫不知情的情况下,对其进行拦截,并将流量导入一个代理。这种代理被称为拦截代理

拦截代理通常被称为“透明代理”,因为你会在不知情的情况下连接到这些代理上去

3.修改DNS的命名空间

放在Web服务器之前的代理服务器——替代物,会直接假扮Web服务器的名字和IP地址,这样,所有的请求就会发送给这些替代物,而不是服务器了。要实现这一点,可以手工编辑DNS名称列表,或者用特殊的动态DNS服务器根据需要来确定适当的代理或服务器。有时在安装过程中,真实服务器的IP地址和名称被修改了,替代物得到的会是之前的地址和名称。

4.修改Web服务器

也可以将某些Web服务器配置为向客户端发送一条HTTP重定向命令,将客户端重定向到一个代理上去。收到重定向命令后,客户端会与代理进行通信。

在这里插入图片描述

客户端的代理设置

1.客户端的代理配置:手工配置

为代理指定主机和端口。有些ISP(Internet Service Provider)会向客户端发送预先配置好的浏览器,或定制好的操作系统,使其将Web流量重定向到代理服务器上。

2.客户端代理配置:PAC文件

PAC(Proxy auto-config)文件是一些小型的JavaScript程序,可以在运行过程中计算代理设置,因此是一种更动态的代理配置解决方案。

3.客户端代理配置:WPAD

WPAD(Web Proxy Auto-Discovery Protocol)协议的算法会使用发现机制的逐级上升策略自动地为浏览器查找合适的PAC文件。实现WPAD协议的客户端需要:

  • 用WPAD找到PAC的URI;
  • 从指定的URI获取PAC文件;
  • 执行PAC文件来判定代理服务器;
  • 为请求使用代理服务器。

当前的WPAD协议规范按顺序定义了下列技术:

  • 动态主机配置协议(Dynamic Host Configuration Protocol, DHCP);
  • 服务定位协议(Service Location Protocol,SLP)
  • DNS 知名主机名;
  • DNS SRV(Service Record)记录;
  • TXT记录中的DNS服务URI。

与代理请求有关的一些棘手问题

  • 代理请求中的URI和服务器请求中的URI有何不同;
  • 拦截和反向代理是如何将服务器主机信息隐藏起来的;
  • 修改URI的规则;
  • 代理是怎样影响浏览器的智能URI自动完成机制,或主机名扩展特性的。
1.代理URI与服务器URI的不同

客户端向服务器而不是代理发送请求时,HTTP请求报文中的URI会有所不同。除了这一点之外,Web服务器报文和Web代理报文的语法是一样的。

客户端向Web服务器发送请求时,请求行中只包含部分URI(没有方案、主机或端口):

GET /index.html HTTP/1.0
USer-Agent: SuperBrowser v1.3

当客户端向代理发送请求时,请求行中则包含完整的URI:

GET http://www.marys-antiques.com/index.html HTTP/1.0
User-Agent: SuperBrowser v1.3

原因:

  • 在原始的HTTP设计中,客户端会直接与单个服务器进行对话。不存在虚拟主机,也没有为代理制定什么规则。
  • 单个的服务器都知道自己的主机名和端口,所以,为了避免发送冗余信息,客户端只需发送部分URI即可,无需发送方案和主机(以及端口)。
  • 基于代理的网关要知道URI的方案才能连接到FTP资源和其他方案上去。
2.代理既可以处理代理请求,也可以处理服务器请求

由于将流量重定向到代理服务器的方式有所不同,通用的代理服务器既应该支持请求报文中的完整URI,也应该支持部分URI。如果是显式的代理请求,代理就应该使用完整URI,如果是Web服务器请求,就应该使用部分URI和虚拟Host首部。

使用完整和部分URI的规则如下所示。

  • 如果提供的是完整URI,代理就应该使用这个完整URI。
  • 如果提供的是部分URI,而且有Host首部,就应该用Host首部来确定原始服务器的名字和端口号。
  • 如果提供的是部分URI,而且没有Host首部,就要用其他方法来确定原始服务器:
    —如果代理是代表原始服务器的替代物,可以用真实服务器的地址和端口号来配置代理;
    —如果流量被拦截了,而且拦截者也可以提供原始的IP地址和端口,代理就可以使用拦截技术提供的IP地址和端口号;
    —如果所有方法都失败了,代理没有足够的信息来确定原始服务器,就必须返回一条错误报文。
3.URI的客户端自动扩展和主机名解析
4.没有代理时URI的解析

在这里插入图片描述

  • 在第(1)步中,用户向浏览器的URI窗口中输入oreilly。浏览器用oreilly作为主机名,并假定默认方案为http://,默认端口为80,默认路径为“/”。
  • 在第(2a)步中,浏览器会去查找主机oreilly。查找失败了。
  • 在第(3a)步中,浏览器对主机名进行自动扩展,请求DNS解析www.oreilly.com。成功。
  • 浏览器成功地连接www.oreilly.com。
5.有显式代理时URI的解析

使用显式代理时,用户的URI会被直接发送给代理,所以浏览器不会再执行所有这些便捷的扩展功能了。
在这里插入图片描述

6.有拦截代理时URI的解析

在这里插入图片描述

  • 在第(1)步中,用户在浏览器的URI地址窗口中输入oreilly。
  • 在第(2a)步中,浏览器通过DNS查找主机oreilly,但DNS服务器失败了,并回送响应说明主机未知,如第(2b)步所示。
  • 在第(3a)步中,浏览器进行自动扩展,将oreilly转换成www.oreilly.com。在第(3b)步中,浏览器通过DNS来查找主机www.oreilly.com。这一次,如第(3c)步所示,DNS服务器成功了,将IP地址返回给了浏览器。
  • 在第(4a)步中,客户端已经成功解析了主机名,并有了一张IP地址列表。有些IP地址可能已经停用了,所以通常客户端会尝试这连接每个IP地址,直到成功为止。但对拦截代理来说,第一次连接请求就会被代理服务器拦截成功,不会连接到原始服务器上去。客户端认为它在与Web服务器进行成功的对话,但那个Web服务器可能甚至都步处于活跃状态。
  • 当代理最终准备好与真正的原始服务器进行交互时【第(5b)步】,代理可能会发现那个IP地址实际指向的是一个已停用的服务器。为了提供与浏览器相同级别的容错机制,代理可以通过解析Host首部的主机名,也可以通过对IP地址的反向DNS来尝试其他IP地址。将浏览器配置为显式代理时,它们会依赖代理的容错机制,所以对拦截和显式的代理实现来说,在DNS解析到已停用服务器时,提供容错机制是很重要的。

追踪报文

两种方式来追踪报文:

  • via首部
  • trace方法

代理认证

代理可以作为访问控制设备使用。HTTP定义了一种名为代理认证的机制,这种机制可以阻止对内容的请求,直到用户向代理提供了有效的访问权限证书为止。

  • 对受限内容的请求到达一台代理服务器时,代理服务器可以返回一个要求使用访问证书的407 Proxy Authorization Required状态码,以及一个用于描述怎样提供这些证书的Proxy -Authenticate首部字段。
  • 客户端收到407响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所需要的证书。
  • 只要获得了证书,客户端就会重新发送请求,在Proxy-Authorization首部字段中提供所要求的证书。
  • 如果证书有效,代理就会将原始请求沿着传输链路向下传送;否则,就发送另一条407应答。
    在这里插入图片描述
    若传输链路中有多个代理,且每个代理都要进行认证时,代理认证通常无法很好地工作。

代理的互操作性

  • OPTIONS:发现对可选特性的支持
  • Allow首部
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值