Web代理服务器是网络的中间实体。位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文。浏览器
私有和共享代理: 代理服务器能够是某个客户端专用的,也能够是不少客户端共享的。单个客户端专用的代理被称为 私有代理
,众多客户端共享的代理被称为 共享代理
。缓存
代理服务器能够实现各类时髦且有用的功能。它们能够 改善安全性
,提升性能
,节省费用
。代理服务器能够看到并接触到全部流过的 HTTP流量
,因此代理能够监视流量并对其进行修改,以实现不少有用的增值Web服务。安全
- 过滤器:针对不一样人群设定不一样内容;
- 文档访问控制:能够将代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略,建立审核跟踪机制;
- 安全防火墙:一般使用代理服务器来提升安全性,代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据能够流入或流出一个组织,还能够提供用来
消除病毒
的Web
和Emai
代理使用的挂钩程序,以便对流量进行详细检查。- Web缓存:代理缓存维护了经常使用文档的本地副本,并将它们按需提供;
- 反向代理:代理能够假扮Web服务器收发请求给真实Web服务器,但与Web服务器不一样的是,它们能够发起与其它服务器的通讯。
- 内容路由器:根据因特网流量情况以及内容类型将请求导向特定的Web服务器。
- 转码器:代理服务器在将内容发送给客户端以前,能够修改内容的主题格式。在这些表示法之间进行透明转换成为转码,如将GIF图片转换为JPG图片,以减少尺寸;
- 出口代理:能够将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量;
- 入口代理:常被放在ISP访问点上,用以处理来自客户的聚合请求;
- 反向代理:一般会被部署在网络边缘,在
Web服务器
以前,做为替代物使用。在那里它们能够处理全部传送给Web服务器的请求
,并只在必要时向Web服务器请求资源;- 网络交换代理:能够将具备足够处理能力的代理放在网络之间的因特网对等交换点上,经过缓存来减轻因特网节点的拥塞,并对流量进行监控;
- 代理的层次结构:能够经过代理层次结构将代理级联起来。在层次结构中,代理服务器被赋予了父和子的关系,下一个入口代理<靠近服务器>被成为父代理,下一个出口<靠近客户端>被成为子代理;
- 负载均衡:子代理可能会根据当前父代理的工做负载级别来决定如何选择一个父代理, 以均衡负载;
- 地理附近的路由:子代理可能会选择负责原始服务器所在物理区域的父代理;
- 协议 / 类型路由:子代理可能会根据
URI
将报文转发到不一样的父代理和原始服务器上去。某些特定的URL
可能要经过一些特殊的代理服务器转发请求,以便进行特殊的协议处理;- 基于订购的路由:若是发布者为高性能服务额外付费,它们的URI就会被转发到大型缓存或压缩引擎上,以提升性能;
有 四种
常见方式可使客户端流向代理:服务器
- 修改客户端:若是将客户端配置为使用代理服务器,客户端就会将HTTP请求有意地发送给代理;
- 修改网络:依赖监视HTTP流量的交换设备及路由设备,在客户端绝不知情的状况下,将其进行拦截,并将流量导入一个代理,这种代理被成为拦截代理;
- 修改DNS的命名空间:编辑DNS名称列表,或者用特殊的动态DNS服务器根据须要来肯定适当的代理或服务器;
- 修改Web服务器:将某些Web服务器配置为想客户端发送一条HTTP重定向命令(305),将客户端请求定向到一个代理上去;
- 手工配置:显式地设置要使用的代理;
- 预先配置浏览器:浏览器厂商或发行商会在浏览器发送其客户以前预先对浏览器的代理设置进行手工设置;
- 代理的自动设置:提供一个
URI
,指向一个用Javascript语言
编写的代理自动配置文件,客户端或读取这个Javascript
文件,并运行它以决定是否应该使用一个代理,若是是,应该使用哪一个代理服务器;- WPAD的代理发现:有些浏览器支持
Web代理自动发现协议(Web Proxy Auto Discovery: WPAD)
这个协议会自动检测出浏览器能够从哪一个“配置服务器”下载到一个自动配置文件;
- 用WPAD找到PAC的URI;
- 从指定的URI获取PAC文件;
- 执行PAC文件来断定代理服务器;
- 为请求使用代理服务器;
客户端向Web服务器发送请求时,请求行中只包含部分URI(没有方案、主机或端口),但当客户端向代理发送请求时,请求行中则包含完整的URI。网络
HTTP/1.1 要求服务器为代理请求和服务器请求都提供完整的URI处理,但实际上,不少已经部署的服务器仍然只接受部分URI。根据是否有代理,浏览器对URI的解析会有所不一样。没有代理时,浏览器会获取你输入的URI,尝试着寻找相应的IP地址,若是找到了主机名,浏览器会尝试相应的IP地址知道获取到成功的链接为止。若是没有找到主机,不少浏览器都会尝试着提供某种主机名自动“扩展”机制,以防用户输入的是“简短”的缩写形式。例如:当你输入 yahoo
时,大多数浏览器都会自动将其扩展成 www.yahoo.com
,相似地,浏览器容许用户省略前缀,http://,若是省略了浏览器会自动插入。当使用显式代理时,用户的URI会将直接发送给代理,因此浏览器就再也不执行这些便捷操做了。负载均衡
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首部字段信息包含一个由逗号分隔的路标,每一个路标都表示一个独立的代理服务器或网关,且包含与那个中间节点的协议和地址有关的信息。spa
每一个Via路标中最多包含4个组件:.net
- 一个可选协议名,默认为HTTP
- 一个必选协议版本
- 一个必选的节点名
- 可选的描述行注释
协议名: 中间点收到的协议。若是协议为HTTP的话,协议名就是可选的。不然,要在版本以前加上协议名,中间用“/”分隔,网关将HTTP请求链接其它协议时,可能会使用非HTTP协议;
协议版本: 版本的格式与协议有关;
节点名: 中间节点的主机和可选端口号;
节点注释: 进一步描述这个中间节点的可选注释。一般会在这里包含厂商和版本信息;代理
请求和响应报文都会通过代理进行传输,所以,请求和报文中都要有Via首部,可是响应Via一般与请求Via相反。
经过 HTTP OPTIONS 方法,客户端能够发现Web服务器或者其上某个特定资源所支持的功能(好比:它们所支持的方法),经过使用 OPTIONS,客户端能够在与服务器进行交互以前,肯定服务器的能力,这样就能够方便地与具有不一样特性的代理和服务器进行交互了。若是OPTIONS请求的URI是个*,请求的是整个服务器所支持的功能。若是成功,OPTIONS方法就会返回一个包含了各类首部字段的 200 OK
回应,这些字段描述了服务器所支持的,或资源可用的各类可选特性。
列出了请求URI标识的资源所支持的方法列表,若是请求URL为 *的话,列出的就是整个服务器所支持的方法列表。