1.web中间实体
Web 上的代理服务器是代表客户端完成事务处理的中间人。HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。
(1)私有和共享代理
• 公共代理
大多数代理都是公共的共享代理。集中式代理的成本效率更高,更容易管理。比如高速缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。
• 私有代理 专用的私有代理并不常见,些浏览器辅助产品,以及一些 ISP 服务,会在用户的 PC 上直接运行 一些小型的代理,以便扩展浏览器特性,提高性能,或为免费 ISP 服务提供主机广告。
(2)代理与网关的对比
严格来说,代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是 两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。
实际上,代理和网关之间的区别很模糊。由于浏览器和服务器实现的是不同版本的 HTTP,代理也经常要做一些协议转换工作。而商业化的代理服务器也会实现网关的功能来支持 SSL 安全协议、SOCKS 防火墙、FTP 访问,以及基于 Web 的应用程序。
2.为什么使用代理
它们可以改善安全性,提高性能,节省费用。代理服务器可以看到并接触到所有流过的 HTTP 流量,所以代理可以监视流量并对其进行修改,以实现很多有用的增值 Web 服务。
• 儿童过滤器
• 文档访问控制
• 安全防火墙:网络安全工程师通常会使用代理服务器来提高安全性。代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织。
• Web缓存:代理缓存维护了常用文档的本地副本,并将它们按需提供,以减少缓慢且昂贵的因特网通信。
• 反向代理:代理可以假扮 Web 服务器。这些被称为替代物(surrogate)或反向代理(re- verse proxy)的代理接收发给 Web 服务器的真实请求。
• 内容路由器:内容路由器也可以用来实现各种服务级的请求。比如,如果用户或内容提供者付费要求提供更高的性能,内容路由器可以将请求转发到附近的复制缓存,或者如果用户申请了过滤服务,还可以通过过滤代理来转发 HTTP 请求
• 转码器:代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码(transcoding)。
• 匿名者:
3.代理会去往何处
(1)代理服务器的部署
• 出口代理:可以将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量。
• 访问(入口)代理:代理常被放在 ISP 访问点上,用以处理来自客户的聚合请求。ISP 使用缓存代理来存储常用文档的副本,以提高用户(尤其是高速连接用户)的下载速度,降低因特网带宽耗费
• 反向代理:可以提高 Web 服务器的 安全特性,或者将快速的 Web 服务器缓存放在较慢的服务器之前,以提高性能。
• 网络交换代理:可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监视。
(2)代理的层次结构:可以通过代理层次结构(proxy hierarchy)将代理级联起来
代理层次结构的内容路由
• 如果所请求的对象属于一个付费使用内容分发服务的 Web 服务器,代理就会将 请求发送给附近的一个缓存服务器,
• 如果请求的是特定类型的图片,访问代理会将请求转发给一个特定的压缩代理, 这个代理会去获取图片,然后对其进行压缩,这样通过到客户端的慢速 Modem 下载时,速度会更快一些。
• 负载均衡 子代理可能会根据当前父代理上的工作负载级别来决定如何选择一个父代理,以均衡负载。
• 地理位置附近的路由 子代理可能会选择负责原始服务器所在物理区域的父代理。
• 协议 / 类型路由:子代理可能会根据 URI 将报文转发到不同的父代理和原始服务器上去。
• 基于订购的路由:如果发布者为高性能服务额外付费了,它们的 URI 就会被转发到大型缓存或压 缩引擎上去,以提高性能。
(3)代理是如何获取流量的
• 修改客户端:如果将客户端配置为使用代理服务器,客户端就会将 HTTP 请求有意地直接发送 给代理,而不是原始服务器
• 修改网络:拦截代理
• 修改 DNS 的命名空间
• 修改 Web 服务器
4.客户端的代理设置
• 手工配置
• 预先配置浏览器
• 代理的自动配置(Proxy Auto-Configuration,PAC):PAC 文件是一些小型的 JavaScript 程序,可以在运行过程中计算代理设置,因此,是一种更动态的代理配置解决方案。访问每个文档时,JavaScript 函数都会选择恰当的代理服务器。
• WPAD 的代理发现:WPAD 协议的算法会使用发现机制的逐级上升策略自动地为浏览器查找合适的 PAC 文件。
实现 WPAD 协议的客户端 需要:
• 用WPAD找到PAC的URI;
• 从指定的 URI 获取 PAC 文件;
• 执行 PAC 文件来判定代理服务器;
• 为请求使用代理服务器。
当前的 WPAD 协议规范按顺序定义了下列技术:
• 动态主机配置协议(DynamicHostConfigurationProtocol,DHCP);
• 服务定位协议(ServiceLocationProtocol,SLP);
• DNS 知名主机名;
• DNS SRV 记录;
• TXT 记录中的 DNS 服务 URI。
5.与代理请求有关的一些棘手问题
(1)代理URI与服务器URI的不同
1) 没有设置客户端使用代理时,它会发送部分 URI。
2) 设置客户端使用代理时,它会发送完整 URI
(2)与虚拟主机一样的问题
(3)拦截代理会收到部分URI
(4)代理既可以处理代理请求,也可以处理服务器请求
(5)转发过程中对URI的修改:HTTP 规范禁止一般的拦截代理在转发 URI 时重写其绝对路径部分。唯一的例外是可以用“/”来取代空路径。
(6)URI的客户端自动扩展和主机名解析
• 很多浏览器会尝试着加入前缀 www. 和后缀 .com,以防用户只输入了常见 Web 站点名的中间部分(比如,人们可以输入 yahoo 而不是 www.yahoo.com)。
• 有些浏览器甚至会将未解析出来的URI传递给第三方站点,这个站点会尝试着校正拼写错误,并给出一些用户可能希望访问的 URI 建议。
• 而且,大多数系统中的 DNS 配置允许用户只输入主机名的前缀,然后 DNS 会自 动搜索域名。如果用户位于域名 oreilly.com 的范围之内,并输入了主机名 host7, DNS 会自动尝试将其与 host7.oreilly.com 进行匹配。
6.追踪报文
(1)Via首部:Via 首部字段列出了与报文途经的每个中间节点(代理或网关)有关的信息。报文每经过一个节点,都必须将这个中间节点添加到 Via 列表的末尾。
例如:Via: 1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com
Via的请求和响应路径:请求和响应通常都是通过同一条 TCP 连接传送的,所以响应报文会沿着与请求报文相同的路径回传。如果一条请求报文经过了代理 A、B 和 C,相应的响应报文就会通过代理 C、B、A 进行传输。
(2)TRACE方法
通过 HTTP/1.1 的 TRACE 方法,用户可以跟踪经代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文进行修改的。
TRACE 响应的 Content-Type 为 message/http,状态为 200 OK。
Max-Forwards:可以使用 Max-Forwards(最大转发次数)首部来限制 TRACE 和 OPTIONS 请求所经过的代理跳数,如果 Max-Forwards 的值为零(Max-Forwards:0),那 么即使接收者不是原始服务器,它也必须将 TRACE 报文回送给客户端,而不应该继续转发。
7.代理认证
• 对受限内容的请求到达一台代理服务器时,代理服务器可以返回一个要求使用访 问证书的 407 Proxy Authorization Required 状态码,以及一个用于描述怎样提供 这些证书的 Proxy-Authenticate 首部字段
• 客户端收到 407 响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所 需要的证书。
• 只要获得了证书,客户端就会重新发送请求,在 Proxy-Authorization 首部字段中提供所要求的证书。
• 如果证书有效,代理就会将原始请求沿着传输链路向下传送;否则,就发送另一条 407 应答。
8.处理代理不支持的首部和方法:代理必须对不认识的首部字段进行转发,而且必须维持同名首部字段的相对顺序。
9.OPTIONS:发现对可选特性的支持
如果 OPTIONS 请求的 URI 是个星号(*),请求的就是整个服务器所支持的功能。比如:OPTIONS * HTTP/1.1
如果 URI 是个实际资源地址,OPTIONS 请求就是在查询那个特定资源的可用特性: OPTIONS http://www.joes-hardware.com/index.html HTTP/1.1
10.Allow首部
Allow 实体首部字段列出了请求 URI 标识的资源所支持的方法列表,如果请求 URI为 * 的话,列出的就是整个服务器所支持的方法列表。
例如: Allow: GET, HEAD, PUT
来源:oschina
链接:https://my.oschina.net/u/4038596/blog/4312599