文档章节

http权威指南 - 6.代理

dfatxm
 dfatxm
发布于 2016/12/02 11:23
字数 2442
阅读 34
收藏 1

行业解决方案、产品招募中!想赚钱就来传!>>>

代理的概念:

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

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

为什么使用代理:

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

 

代理使用方法示例:

  1. 过滤器:针对不同人群设定不同内容;
  2. 文档访问控制:可以将代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略,创建审核跟踪机制;
  3. 安全防火墙:通常使用代理服务器来提高安全性,代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织,还可以提供用来消除病毒的 Web 和 Emai 代理使用的挂钩程序,以便对流量进行详细检查。
  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为 *的话,列出的就是整个服务器所支持的方法列表。

dfatxm
粉丝 3
博文 66
码字总数 20630
作品 0
厦门
前端工程师
私信 提问
加载中
请先登录后再评论。
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
6
REST/HTTP 工具包--Spray

Spray 是一个开源的 REST/HTTP 工具包和底层网络 IO 包,基于 Scala 和 Akka 构建。轻量级、异步、非堵塞、基于 actor 模式、模块化和可测试是 spray 的特点。 示例代码: val responses: F...

匿名
2013/02/20
7K
0
ZimbraBackend

开源Z-push(http://z-push.sourceforge.net)的Zimbra后端的ActiveSync实现。支持推送电子邮件、同步联系人、日历、任务等在Zimbra和具有ActiveSync功能的设备。 特性: ActiveSync Push Em...

匿名
2012/11/04
728
0
Web代理框架--GSnova

本项目衍生继承自Snova, 侧重于基于各种PaaS平台打造自用Proxy,兼顾一些反防火墙干扰的工程实现. GSnova(Go)是几乎和snova功能一致的Go语言实现,包括GAE/C4支持,弱化的SPAC实现,以及额外...

yinqiwen
2012/12/11
3.9K
0
计算资源管理平台--Apache VCL

Apache VCL 是一个自服务的系统,为最终用户提供专用计算环境的远程访问环境。典型的使用场景是数据中心,也可以是物理刀片服务器、传统机架服务器或者虚拟机。VCL 也可以提供独立机器的代理...

匿名
2013/01/04
2.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

用17张 图带你看懂红黑树5大特性

tips:叶子结点,没有子结点的节点。nil等同于java中的null。 根据特点4,得出不能有连续的红色结点,特点5又说从任一结点到每个叶子节点的左右路径都包含相同数目的黑色节点。可以推出最长的路...

小咖呀
今天
0
0
为什么java8还在被大量使用?

  对于很多人来说,新版本的很多功能是很值得期待,并且他是从功能开发到预览一直在关注。而且对于本身来说升级所带来的好处远远大于升级所带来的工作量。   因为java 本身的兼容性问题,...

SXXpenguin
10分钟前
12
0
Yotta企业云盘:企业数据存储的可靠平台

回顾过去的几年,企业云盘市场发生了许多里程碑式的事件。 市场仍在继续进行模式重塑和集成的过程。 行业趋势已经出现,市场在平静中培育了新的机会。 企业在内容管理中的痛点越来越明显,需...

osc_srnunz15
11分钟前
0
0
《剑指 offer》 21. 调整数组顺序使奇数位于偶数前面

点击上方“图解面试算法”,选择“星标”公众号 重磅干货,第一时间送达 大家好,我是程序员吴师兄。 今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题 21.调整数组顺序使奇数位于...

五分钟学算法
今天
0
0
有了这份程序员面试指南,你离大厂Offer还远吗?| 附推荐书籍

本篇文章,我将结合英文版的 Google 面试指南的主线,根据自己的理解对文章进行修改,然后结合自己面试国内大厂的经验给大家阐述。其实我觉得,各大公司针对程序员岗位的面试流程来讲是相对比...

HollisChuang
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部