您的位置:首页 > 理论基础 > 计算机网络

《HTTP权威指南》——代理

2016-06-29 21:09 519 查看

什么是HTTP代理

HTTP代理(服务器)时HTTP客户端和HTTP服务器进行事务处理的中间人。

有了HTTP代理后,HTTP客户端和HTTP服务器不需要直接对话,而是通过HTTP代理进行事务处理。

HTTP代理既是客户端,又是服务器,对于HTTP客户端而言,它是服务器; 对于HTTP服务器而言代理编程了客户端。

私有代理 、 公共代理

HTTP代理有私有代理和公共(共享)代理两种:

+ 私有代理: 单个客户端专用的代理

+ 公共代理: 众多客户端共享的代理。

大多数代理都是公共代理

代理与网关的对比

代理: 代理连接的是两个或多个使用相同协议的应用程序

网关: 网关连接的是两个或多个使用不同协议的端点。 如(HTTP/POP网关),可以帮助我们使用HTTP读取E-mail。

代理的作用

HTTP代理提供许多功能,如改善安全性、提高性能、节省开销等。

HTTP代理服务器可以查看、修改、过滤HTTP流量。 下面是几种使用代理的事例:

+ 站点过滤: HTTP代理可以设置允许或禁止客户端访问某一些站点。

+ 文档访问控制:代理可以统一管理多台Web服务器上的资源的访问权限。 而不需要逐一配置各个服务器。

+ 安全防火墙: 网络工程师可以利用HTTP代理对流量进行限制。

+ Web缓存: HTTP代理能够维护常用文档的本地副本,从而减少因特网通信的开销。

+ 反向代理: 发现代理服务器接收发给Web服务器的真实请求,但发起与其它(更快的,能提供相同服务的)服务器的通信。它可以用来实现服务器加速器

HTTP代理的部署与实施

代理的部署与结构

根据目标用途,HTTP代理有一下几种部署方式:

+ 出口代理: 部署在本地网络的出口点,控制本地网络与大型因特网之间的流量。

+ 入口代理: 访问(出口)代理一般部署在ISP访问点上。(ISP使用缓存代理来存储常用文档的副本,降低网络开销,提升网络性能。)

+ 网络交换代理: 部署在网络之间的对等交换点上。

HTTP代理可以存在动态的层次结构。在层次结构中,带是具有父与子的关系。子代理可以动态选择父代理。

父代理有不同的动态选择的方式:

+ 负载均衡: 根据父代理上的工作负载级别决定选择哪一个付代理。

+ 地理位置: 根据物理区域选择父代理

+ 协议/类型路由: 根据URI的类型选择父代理

+ 基于订购的路由: 一些使用者可能是付费的高级用户,应该选择性能更高的父代理处理其请求。

如何获取HTTP流量

HTTP代理服务器要称为HTTP客户端和服务器之间的中间人,进行事务处理,首先要获取HTTP流量。 一般而言,HTTP客户端会将报文直接发往服务器。我们需要进行一些设置,使得流量流向代理。

以下是几种让流量流向代理的方法:

+ 修改客户端:对浏览器手动进行代理配置

+ 修改网络:在客户端不知情的情况下,拦截网络流量。这依赖于网络交换/路由设备。

+ 修改DNS的命令空间:在Web服务器之前放置一个替代物(代理服务器)。代理服务器脚本Web服务器的主机名和IP地址。

+ **修改Web服务器:**Web服务器向客户端发送一条HTTP重定向命令。

客户端的代理设置

所有现代的Web浏览器都允许用户进行代理配置。

常见的客户端代理配置方法有一下几种:

+ 手工配置: 显示设置要使用的代理, 在浏览器的设置项中进行配置。

+ 预先配置浏览器:浏览器的厂商、发行商在发型浏览器之前对浏览器的代理设置进行手工配置

+ 代理的自动配置——PAC:提供URI,指向JavaScript编写的代理自动配置脚本。

+ **WPAD的代理发现:**Wep代理自动发现协议,基于PAC,能够根据一定策略寻找PAC文件。

与HTTP代理相关的棘手问题

代理URI与服务器URI的区别

代理URI:客户端向服务器发送请求时,请求行仅包含部分URI(不包含主机名和端口号)

服务器URI:客户端向服务器发送请求时,请求行包含部分URI(包含主机名和端口号)

客户端在不经过代理时,与单个服务器进行对话,服务器都知道自己的主机名和端口(它们属于冗余信息),

与虚拟主机一样的问题

虚拟Web服务器会在多个Web站点间共享同一物理Web服务器。

与代理服务器使用完整URI不同的是,虚拟主机Web站点使用
host
首部来区别不同的站点。

拦截代理会收到部分的URI

由于客户端并不总是知道与其进行对话的是服务器还是代理, 因为有些代理是不可见的,客户端就没有显示配置为使用代理。此时客户端的流量也可能会经过拦截代理。对于客户端而言,拦截代理就相当于Web服务器了。

拦截代理会拦截从客户端发往服务器的请求(即使客户端的请求没有使用完整的URI)。

代理既可以处理代理请求、也可以处理服务器请求

通用的代理应该支持完整的URI,也应支持部分URI。

转发过程对URI的修改

代理服务器可能在转发请求的过程修改URI, 这需要格外小心。

URI的解析

客户端自动拓展 和主机名解析

浏览器在查询不带URI对应的主机时,可能会对URI中的主机名进行自动拓展或者解析。

一些浏览器会尝试加入前缀www. 和 后缀 .com

有些浏览器会将未解析的URI传给第三方站点,尝试校正拼写错误,给出一些可能的URI建议

没有代理时的URI解析:

自动拓展 + DNS

有显示代理时的URI解析:

不自动拓展URI了,直接发给代理。

有拦截代理时URI的解析:

自动拓展 + 不自动拓展 + DNS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: