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的代理服务器即是客户端的服务器又是服务器的客户端. 它介于服务器与客户端之间,当客户端发送请求报文经过它时,它会像服务器一样正确的处理请求和返回响应,同时,代理服务器 ...
随机推荐
- Installing Fonts programatically C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Android 系统工具类
系统工具类 public class systemUtil { //隐藏ipad底部虚拟按键栏 @RequiresApi(api = Build.VERSION_CODES.KITKAT) publi ...
- (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)
转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ...
- WCF服务端开发和客户端引用小结
1.服务端开发 1.1 WCF服务创建方式 创建一个WCF服务,总是会创建一个服务接口和一个服务接口实现.通常根据服务宿主的不同,有两种创建方式. (1)创建WCF应用程序 通过创建WCF服务应用程序 ...
- AspNetCore2身份验证
1.在Startup类的Configure方法,添加身份验证的中间件AuthenticationMiddleware app.UseAuthentication(); 2.在Startup类的Conf ...
- django静态文件
django静态文件(js脚本.CSS.图片等) 默认统一放在每一个app的static文件夹下, 通过收集静态文件命令,自动将每一个app下static文件夹下的文件复制到根目录的static文件夹 ...
- SQL Server 将一个表中字段的值复制到另一个表的字段中
具体方法如下 一:update 表2 set (要插入的列名)= select 表1.某一列 from 表1 left jion 表2 on 表1和表2的关联 where ..... 二:update ...
- 高通GPIO驱动(DTS方式)
gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态: sysfs文件系统的建立可以参照下面的博 ...
- gitlab 和 github 配置 SSH Keys
gitlab 文档上给了很好的配置的例子:https://gitlab.com/help/ssh/README#locating-an-existing-ssh-key-pair 针对mac 下的使用 ...
- Linux 查看对外开放端口
备忘命令: netstat -anpt | grep 514 # 查看 rsyslog tcp 端口是否开放 保持更新,转载请注明出处.