代理的概念:

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

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

为什么使用代理:

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

代理使用方法示例:

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

### 图灵图书 -- HTTP权威指南

豆瓣读书 -- HTTP权威指南

《HTTP权威指南》– 6.代理的更多相关文章

  1. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  2. 【HTTP权威指南】第1 章 HTTP 概述

    1.1 HTTP--因特网的多媒体信使 ................................................................................ ...

  3. 《HTTP权威指南》读书笔记(一)

    1.因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都搭上了名为MIME类型的数据格式标签.WEB服务器会为所有HTTP对象数据附加一个MIME类型.当Web浏览器从服务器中 ...

  4. 《http权威指南》读书笔记18

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  5. 《http权威指南》读书笔记17

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  6. 《http权威指南》读书笔记13

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  7. 《http权威指南》读书笔记12

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  8. 《http权威指南》读书笔记11

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  9. 《http权威指南》读书笔记8

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  10. 《http权威指南》读书笔记7

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

随机推荐

  1. .NET 反向代理 YARP 代理 GRPC

    前面的 YARP 文档中,介绍了怎么去代理 http,和如何根据域名转发,而在现在微服务的应用是越来越来多了,服务间的调用依靠 http 越来越不现实了,因为 http 多次握手的耗时越发的影响应用的 ...

  2. [算法2-数组与字符串的查找与匹配] (.NET源码学习)

    [算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法)   2. 字符串查找(算法)   3. C#中的String(源码)   4. 特性Attribute 与内 ...

  3. python-函数-统计函数

    #(1)amax(),amin() 作用:计算数组中的元素沿指定轴的最大值,最小值 import numpy as np x = np.random.randint(1,11,9).reshape(( ...

  4. centos7中配置java + mysql +jdk +使用jar部署项目

    centos7中配置java + mysql +jdk  +使用jar部署项目 思维导图 1. 配置JDK環境 1.1下载jdk安装包 Java Downloads | Oracle 1.2 将下载j ...

  5. springboot H2 linux下搭建使用

    这次研究是H2数据库了,关键还是再Linux下进行搭建部署的,被这个数据库快弄死了弄了4天时间,现在大致可以用了,还有些细节需要修正. 我这边使用的是springboot集成模式.直接使用代码启停方式 ...

  6. input框限制只能输入数字的两种方法

    方法一: <input type="text"   oninput="value=value.replace(/[^\d.%]/g,'')"> 方法 ...

  7. Java注解(3):一个真实Elasticsearch案例

    学会了技术就要使用,否则很容易忘记,因为自然界压根就不存在什么代码.变量之类的玩意,这都是一些和生活常识格格不入的东西.只能多用多练,形成肌肉记忆才行. 在一次实际的产品开发中,由于业务需求的缘故,需 ...

  8. 快速上手Spring项目

    通过maven依赖管理导入所需Jar包 注 : spring 需要导入commons-logging进行日志记录 . 我们利用maven , 他会自动下载对应的依赖项 . <dependency ...

  9. servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)

    文章目录 1.什么是过滤器? 2.过滤器核心对象 3.过滤器创建和配置 4.举例子 1.什么是过滤器? 主要用于对客户端的请求进行过滤处理,再将经过过滤后的请求转交给下一个资源. 2.过滤器核心对象 ...

  10. 人人都懂的HTML基础知识-HTML教程(1)

    01.HTML基础简介 HTML (HyperText Markup Language,超文本标记语言) 不是一门编程语言,而是一种用于定义内容结构的标记语言,用来描述网页内容,文件格式为.html. ...