http协议进阶(六)代理
web代理服务器是网络的中间实体,位于客户端和服务器之间,扮演“中间人”的角色,作用是在各端点之间来回传送报文。
其原理是:客户端向代理服务器发送请求报文,代理服务器正确的处理请求和连接,然后返回响应;同时代理服务器自身要向web服务器发送请求并接收响应。
即:代理即是服务器,又是客户端。如下图所示:

一、代理的类型
1、私有代理
定义:单个客户端专用的代理被称为私有代理。
私有代理并不常见,但确实存在,比如一些浏览器的辅助产品,一些ISP服务,会在用户的PC上直接运行一些小型代理,以便扩展浏览器特性,提高性能,或者为免费ISP服务提供主机广告等。
2、公共代理
定义:多个客户端共享的代理被称为公共代理,也称为“集中式代理”。
优点:节省成本,效率更高,方便管理,比如:“高速缓存代理服务器”。
二、代理和网关的区别
代理:连接两个或多个使用相同协议的应用程序;
网关:连接两个或多个使用不同协议的端点(可以理解为“协议转换器”);
相同点:代理和网关之间的区别很模糊,代理经常也会做一些协议转换的工作,比如:支持SSL协议、SOCKS防火墙、FTP访问等。
如下图所示:

三、代理的特点
1、资源访问控制
利用过滤器代理进行身份权限验证,或使用代理服务器在大量的web服务器和资源之间实现统一的访问控制策略,创建审核跟踪机制,对所有访问控制功能进行配置,特别体现在大型环境或其他分布式机制的服务中。

2、提高安全性
利用代理服务器在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或者流出,还可以提供用来某些防范和杀毒的挂钩程序,以便对流量进行详细的检查。

3、web缓存
可以利用缓存服务器维护存储常用资源的本地副本,并将其按需提供,以减少连接,缩短连接时延,提高性能。

4、反向代理
代理可以扮演服务器的角色接收发送给web服务器的真实请求,也可以发起与其他服务器的通信,以便按需定位所请求的内容;可以利用反向代理来提高访问web服务器上公共资源时的性能。
或者将其和内容路由功能配合使用,以创建分布式网络。

5、内容路由器
代理服务器可以作为“内容路由器”使用,根据因特网的流量以及内容类型将请求导向特定的web服务器(类似负载均衡),也可以用来实现各种服务级的请求。

6、转码器
代理服务器也可以在将内容发送给客户端之前,修改内容的主体格式,对其进行透明转换,我们称之为转码(比如更改图片格式,文件编码类型等)。

7、匿名
可以利用代理从HTTP报文中删除身份特性(比如IP、cookie),从而提供高度的私密性和安全性。

四、代理服务器的部署
1、出口代理
将代理固定在本地网络出口点,以便控制本地网络和大型英特网之间的流量,提供针对企业外部恶意攻击的防火墙保护;或降低带宽费用,提高性能。

2、访问(入口)代理
将代理放在ISP访问点上,用来处理来自客户端的聚合请求,ISP使用缓存代理来存储常用的资源副本,提高用户下载速度,降低带宽耗费等。

3、反向代理
将代理部署在网络便边缘,web服务器之前,作为反向代理处理所有传给web服务器的请求,并只在必要时向web服务器请求资源;反向代理可以提高服务器的安全性和性能。

4、网络交换代理
将具有足够处理能力的代理服务器放在网络上的对等交换点,通过缓存来减轻网络堵塞,并对流量进行监视。

5、层级代理
通过代理的层次结构将代理级联起来,既可以是静态的也可以是动态的,直到将报文发送到原始服务器。
下图是一个三级代理的层级结构示意图:

下图是一个静态动态代理结合的结构示意图:

6、常见的几种动态选择父代理方式
①、负载均衡
子代理可能会根据当前父代理上的工作负载级别来决定如何选择一个父代理,以达到负载均衡。
②、地理位置附近的路由
子代理可能会选择负责原始服务器所在物理区域的父代理。
③、协议/类型路由
子代理可能根据URI将报文转发到不同的父代理和原始服务器上,某些特定类型的URI可能要通过一些特殊的代理服务器转发请求,以便进行特殊的协议处理。
④、基于订购的路由
如果发布者为高性能服务额外付费了,他们的URI就会被转发到大型缓存或者压缩引擎上,以提高性能。
PS:在不同的产品中,动态父路由逻辑的实现方式各有不同,包括使用配置文件、脚本语言和动态可执行插件等。
五、代理如何获取流量
1、修改客户端配置
很多web客户端都支持手工和自动的代理配置,如果将客户端配置为使用代理服务器,客户端会将HTTP请求直接发送给代理,而不是原始服务器。

2、修改网络,拦截代理
依赖于监视HTTP流量的交换设备及路由设备,在客户端不知情的情况下,对其进行拦截,并将流量导入一个代理。

3、反向代理
修改DNS的命名空间,假扮原始服务器的名称和IP地址,这样所有的请求都会发送给这些反向代理服务器,而不是原始服务器。

4、重定向
可以将某些web服务器的配置为向客户端发送一条HTTP重定向命令,将客户端请求重定向到一个代理上,收到重定向命令后,客户端会与代理进行通信。

以上大概就是关于HTTP协议中代理相关的一些内容整理,涉及到具体实现以及其他方面,可以查阅或者学习相关的具体资料。。。
http协议进阶(六)代理的更多相关文章
- J2EE进阶(六)SSH框架工作流程项目整合实例讲解
J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...
- 服务端技术进阶(六)Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?
服务端技术进阶(六)Ant和Maven的作用是什么?两者之间功能.特点有哪些区别? Ant和Maven都是基于Java的构建(build)工具.理论上来说,有些类似于(Unix)C中的make ,但没 ...
- 协议(Protocol) 和代理(Delegate)
1.概念与组成 delegate是iOS中一种常见的设计模式,是一种消息传递的的方式,常见的消息传递方式还有以下几种: 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. ...
- Python进阶(六)----装饰器
Python进阶(六)----装饰器 一丶开放封闭原则 开放原则: 增加一些额外的新功能 封闭原则: 不改变源码.以及调用方式 二丶初识装饰器 装饰器: 也可称装饰器函数,诠释开放封闭原则 ...
- [SuProxy]Ngnix+Lua 实现SSH2,LDAP,ORACLE,SQLSERVER等TCP/IP协议分析,劫持,代理,会话及负载
目录 目录 目录 前言 介绍 安装 下载并拷贝 使用LuaRocks安装 运行测试 使用简介 处理器(processor)创建 通道(channel)创建 负载均衡 会话信息和会话管理 Event H ...
- http协议进阶(三)http报文
一.报文流 http报文是在http应用程序之间发送的数据块(也可称为数据包).这些数据块以一些文本的元信息(meta-information)开头,描述了报文的内容及含义,后面跟着 可选的数据部分, ...
- http协议进阶(二)URL与资源
一.URL的语法 URL是互联网资源的标准化名称 URL提供了一种定位互联网上任意资源的手段,但这些资源要通过不同方案(协议:比如http.ftp.smtp)来访问,因此URL语法会略有差异 大部分 ...
- http协议进阶(一)http概述
参考书籍——<HTTP权威指南> 1.web客户端和服务器 http客户端发出请求,其中包含请求内容,发给服务器,服务器再返回内容中回送请求的数据,http客户端和服务器构成了万维网的基本 ...
- HTTP权威协议笔记-6.代理
6.1 Web的中间实体 Http的代理服务器即是客户端的服务器又是服务器的客户端. 它介于服务器与客户端之间,当客户端发送请求报文经过它时,它会像服务器一样正确的处理请求和返回响应,同时,代理服务器 ...
随机推荐
- SQL Server 基本SELECT语句
1.SELECT 和 FROM 语句 SELECT表示执行的是查询,接着需要更知道从哪边查询数据,FROM就是限制读取的数据在哪一个表或哪几个表中,这样就构成了一个基本语句. SELECT * FRO ...
- js查询数组或者List类型是否包含某个元素
方法一:arr.indexOf(某元素) 实际用法:if(arr.indexOf(某元素) > -1){//则包含该元素} 例: var fruits = ["Banana" ...
- 本地navicate for mysql怎么修改密码?
1.以前在本地设置sql库密码,就是在本地新建数据库的时候就输入,怎么也链接不上,原来是新建数据库的时候不能输入密码,需要在内部修改. 2. 打开mysql user表 3. 打开mysql user ...
- Python十讲 - 第一讲:从零开始学Python
之后慢慢添加... Python语言的背景知识
- csharp: Use of Is and As operators in csharp
/// <summary> /// Geovin Du 20170622 /// </summary> /// <param name="sender" ...
- react组件中的constructor和super小知识
react组件中的constructor和super小知识 1.react中用class申明的类一些小知识 如上图:类Child是通过class关键字申明,并且继承于类React. A.Child的类 ...
- 语义分割的简单指南 A Simple Guide to Semantic Segmentation
语义分割是将标签分配给图像中的每个像素的过程.这与分类形成鲜明对比,其中单个标签被分配给整个图片.语义分段将同一类的多个对象视为单个实体.另一方面,实例分段将同一类的多个对象视为不同的单个对象(或实例 ...
- Java强引用、软引用、弱引用及虚引用深入探讨
强引用.软引用.弱引用和虚引用深入探讨 为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为强引用.软引用.弱引用.虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器 ...
- 使用windows命令和iconv.exe批量转换文件编码
iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt ...
- 利用trie树实现前缀输入提示及trie的python实现
代码来自https://github.com/wklken/suggestion/blob/master/easymap/suggest.py 还实现了缓存功能,搜索某个前缀超过一定次数时,进行缓存, ...