Web架构“圣经”-------HTTP权威指南--4

来源:互联网 发布:mac pro13寸尺寸 编辑:程序博客网 时间:2024/06/06 09:05

六,代理

1,简介

代理是介于客户端和服务器之间的中间实体,它既可以充当客户端,也可以充当服务器(对于客户端来说它就相当于服务器,对于服务器来说它就相当于客户端);代理可以根据客户端的个数分为专用代理(单个客户端专用)和共享代理(多个客户端共享)。

2,代理与网关的对比

代理连接的是两个或多个使用相同协议的应用程序,二网关连接的是两个或多个使用不同协议的应用程序,所以网关扮演的是“协议转换器”的角色。

3,使用代理的好处

代理服务器可以看到并且接触到所有流过的HTTP流,所以代理可以监视流量并对其进行修改,这是非常中要的,代理的所有功能都是基于这一点的;

所以,代理可以改善安全性、提高性能、节省费用等,比如:实现过滤器、文档访问控制、安全防火墙、web缓存、反向代理等等

4,代理是如何获取流量的?

通常,客户端是直接与web服务器直接进行通信的,有四种方式可以使得HTTP流量流向代理:

(1)修改客户端:即配置为使用代理的客户端

   配置方法:手工配置、预先配置浏览器、代理的自动配置(PAC)、WPAD的代理发现

(2)修改网络:在网络中拦截流量(比如使用路由器拦截),将其重定向到代理;

(3)修改DNS命名空间:即使用“替代物”,替代物是放在web服务器之前的代理服务器,它会直接假扮web服务器的名字和IP地址,这样,所有的请求就会发送到这些替代物上,而不是原始服务器了;要实现这一点,可以手工修改DNS名称列表,也可以用特殊的动态DNS服务器根据需要来确定适当的代理或服务器;

(4)修改web服务器:即将服务器配置为给客户端发送一条HTTP重定向命令(响应码305),将客户端请求重定向到代理上去;

(5)

注意:(2)(3)(4)的配置方法会在20章讲到

5,代理的URI与服务器的URI是不同的

(1)除了这一点,web服务器报文和web代理报文的语法格式是相同的;

(2)客户端向服务器发送请求时,请求行中值包含部分URI(没有方案、主机或端口);这是历史遗留问题,在原始的HTTP设计中,客户端直接与单个服务器进行对话,不存在虚拟主机,也没有为代理指定什么规则;而单个服务器都知道自己的主机名和端口号,所以,为了避免发送冗余信息,客户端只需发送部分URI即可;而代理出现后,这种部分URI就出现问题了;

(3)而向代理发送请求时必须包含完整的URI,否则它就无法工作,不知道该将这个请求转发到哪一个原始服务器上;

(4)因此,我们要将部分URI发送给服务器,而给代理发送完整的URI;在显示配置了客户端代理设置的情况下,客户端就知道要发送那种类型的URI了;

(5)但是,通用的代理服务器完整URI的请求报文,也应该支持部分URI的报文;

6,追踪报文

有相当比例的WEB请求是通过代理转发的,而代理是由不同的厂商开发的,他们有各自不同的特性和缺陷,所以追踪经过代理的报文流、以检测出各种问题就变得尤为重要了!要实现追踪,有两种方式:Via首部和trace方法

一,Via首部:

(1)它列出了与报文途径的每个中间节点(代理和网关)有关的信息; 

(2)Via首部包含以逗号隔开的各个路标,每个路标最多包含四个部分:

     一个可选的协议名(默认为HTTP

     一个必选的协议版本号

     一个必选的节点名(即代理的主机名、要保密的时候就使用假名)

     一个可选的描述性注释

二,trace方法

(1)通过HTTP/1.1trace方法,用户可以跟踪代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文进行修改的;

(2)Trace响应的Content-Typemessage/http,状态码为200 ok

(3)Trace响应会把整条请求报文都封装在HTTP响应主体中回送给客户端;

(4)可以通过Max-Forwards首部指定最大转发次数;