《HTTP权威指南》– 6.代理

代理的概念:

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

私有和共享代理: 代理服务器可以是某个客户端专用的,也可以是很多客户端共享的。单个客户端专用的代理被称为 私有代理,众多客户端共享的代理被称为 共享代理

为什么使用代理:

代理服务器可以实现各种时髦且有用的功能。它们可以 改善安全性提高性能节省费用。代理服务器可以看到并接触到所有流过的 HTTP流量,所以代理可以监视流量并对其进行修改,以实现很多有用的增值Web服务。

代理使用方法示例:

  1. 过滤器:针对不同人群设定不同内容;
  2. 文档访问控制:可以将代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略,创建审核跟踪机制;
  3. 安全防火墙:通常使用代理服务器来提高安全性,代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织,还可以提供用来消除病毒WebEmai 代理使用的挂钩程序,以便对流量进行详细检查。
  4. Web缓存:代理缓存维护了常用文档的本地副本,并将它们按需提供;
  5. 反向代理:代理可以假扮Web服务器收发请求给真实Web服务器,但与Web服务器不同的是,它们可以发起与其它服务器的通信。
  6. 内容路由器:根据因特网流量状况以及内容类型将请求导向特定的Web服务器。
  7. 转码器:代理服务器在将内容发送给客户端之前,可以修改内容的主题格式。在这些表示法之间进行透明转换成为转码,如将GIF图片转换为JPG图片,以减小尺寸;

代理服务器的部署:

  1. 出口代理:可以将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量;
  2. 入口代理:常被放在ISP访问点上,用以处理来自客户的聚合请求;
  3. 反向代理:通常会被部署在网络边缘,在 Web服务器 之前,作为替代物使用。在那里它们可以处理所有传送给 Web服务器的请求,并只在必要时向Web服务器请求资源;
  4. 网络交换代理:可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监控;
  5. 代理的层次结构:可以通过代理层次结构将代理级联起来。在层次结构中,代理服务器被赋予了父和子的关系,下一个入口代理<靠近服务器>被成为父代理,下一个出口<靠近客户端>被成为子代理;
  6. 负载均衡:子代理可能会根据当前父代理的工作负载级别来决定如何选择一个父代理, 以均衡负载;
  7. 地理附近的路由:子代理可能会选择负责原始服务器所在物理区域的父代理;
  8. 协议 / 类型路由:子代理可能会根据 URI 将报文转发到不同的父代理和原始服务器上去。某些特定的 URL 可能要通过一些特殊的代理服务器转发请求,以便进行特殊的协议处理;
  9. 基于订购的路由:如果发布者为高性能服务额外付费,它们的URI就会被转发到大型缓存或压缩引擎上,以提高性能;

代理是如何获取流量的?

四种 常见方式可以使客户端流向代理:

  1. 修改客户端:如果将客户端配置为使用代理服务器,客户端就会将HTTP请求有意地发送给代理;
  2. 修改网络:依赖监视HTTP流量的交换设备及路由设备,在客户端毫不知情的情况下,将其进行拦截,并将流量导入一个代理,这种代理被成为拦截代理;
  3. 修改DNS的命名空间:编辑DNS名称列表,或者用特殊的动态DNS服务器根据需要来确定适当的代理或服务器;
  4. 修改Web服务器:将某些Web服务器配置为想客户端发送一条HTTP重定向命令(305),将客户端请求定向到一个代理上去;

客户端的代理设置:

  1. 手工配置:显式地设置要使用的代理;
  2. 预先配置浏览器:浏览器厂商或发行商会在浏览器发送其客户之前预先对浏览器的代理设置进行手工设置;
  3. 代理的自动设置:提供一个 URI,指向一个用 Javascript语言 编写的代理自动配置文件,客户端或读取这个 Javascript 文件,并运行它以决定是否应该使用一个代理,如果是,应该使用哪个代理服务器;
  4. WPAD的代理发现:有些浏览器支持 Web代理自动发现协议(Web Proxy Auto Discovery: WPAD) 这个协议会自动检测出浏览器可以从哪个“配置服务器”下载到一个自动配置文件;

实现WPAD协议的客户端需要:

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

代理请求的一些问题

客户端向Web服务器发送请求时,请求行中只包含部分URI(没有方案、主机或端口),但当客户端向代理发送请求时,请求行中则包含完整的URI。

HTTP/1.1 要求服务器为代理请求和服务器请求都提供完整的URI处理,但实际上,很多已经部署的服务器仍然只接受部分URI。根据是否有代理,浏览器对URI的解析会有所不同。没有代理时,浏览器会获取你输入的URI,尝试着寻找相应的IP地址,如果找到了主机名,浏览器会尝试相应的IP地址知道获取到成功的连接为止。如果没有找到主机,很多浏览器都会尝试着提供某种主机名自动“扩展”机制,以防用户输入的是“简短”的缩写形式。例如:当你输入 yahoo 时,大多数浏览器都会自动将其扩展成 www.yahoo.com,类似地,浏览器允许用户省略前缀,http://,如果省略了浏览器会自动插入。当使用显式代理时,用户的URI会将直接发送给代理,所以浏览器就不再执行这些便捷操作了。

Via首部

Via首部 列出了与报文途径的每个中间节点(代理或网关)有关的信息,报文每经过一个节点,都必须将这个中间节点添加到Via列表的末尾。

例如: 
Via: 1.1 Proxy – 6.2 . irenes – isp.net (第一个代理名,实现了HTTP/1.1)
      1.0 cache – joes – hardwave.com (第二个代理名,实现了HTTP/1.0)

Via语法: Via首部字段信息包含一个由逗号分隔的路标,每个路标都表示一个独立的代理服务器或网关,且包含与那个中间节点的协议和地址有关的信息。

每个Via路标中最多包含4个组件:

  1. 一个可选协议名,默认为HTTP
  2. 一个必选协议版本
  3. 一个必选的节点名
  4. 可选的描述行注释

协议名: 中间点收到的协议。如果协议为HTTP的话,协议名就是可选的。否则,要在版本之前加上协议名,中间用“/”分隔,网关将HTTP请求连接其它协议时,可能会使用非HTTP协议;
协议版本: 版本的格式与协议有关;
节点名: 中间节点的主机和可选端口号;
节点注释: 进一步描述这个中间节点的可选注释。通常会在这里包含厂商和版本信息;

请求和响应报文都会经过代理进行传输,因此,请求和报文中都要有Via首部,但是响应Via通常与请求Via相反。

OPTIONS首部:发现对可选特性的支持

通过 HTTP OPTIONS 方法,客户端可以发现Web服务器或者其上某个特定资源所支持的功能(比如:它们所支持的方法),通过使用 OPTIONS,客户端可以在与服务器进行交互之前,确定服务器的能力,这样就可以方便地与具备不同特性的代理和服务器进行交互了。如果OPTIONS请求的URI是个*,请求的是整个服务器所支持的功能。如果成功,OPTIONS方法就会返回一个包含了各种首部字段的 200 OK 回应,这些字段描述了服务器所支持的,或资源可用的各种可选特性。

Allow首部:

列出了请求URI标识的资源所支持的方法列表,如果请求URL为 *的话,列出的就是整个服务器所支持的方法列表。


### 图灵图书 -- HTTP权威指南

豆瓣读书 -- HTTP权威指南

posted @ 2015-12-10 12:04  洋芋土豆  阅读(345)  评论(0编辑  收藏  举报