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的代理服务器即是客户端的服务器又是服务器的客户端. 它介于服务器与客户端之间,当客户端发送请求报文经过它时,它会像服务器一样正确的处理请求和返回响应,同时,代理服务器 ...
随机推荐
- canvas-2lineJoin.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- bootstrap网站后台从设计到开发之登录
节后综合征缓了两天,今天把登录界面的主要后台代码分享给大家. protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPo ...
- css引入页面的三种方法
1.内联式:直接在标签上写样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- FullCalendar:eventColor,eventBackgroundColor, eventBorderColor, and eventTextColor
<!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>背景色設定< ...
- 2017-12-22 日语编程语言"抚子"-第三版实现初探
前文日语编程语言"抚子" - 第三版特色初探仅对语言的语法进行了初步了解. 之前的语言原型实现尝试(如编程语言试验之Antlr4+JavaScript实现"圈4" ...
- hosts 文件
各系统平台hosts文件存放路径 路径如下: Windows系统: C:\Windows\System32\drivers\etc\hosts Linux系统:/etc/hosts ...
- python 遇到的小坑
由于前端资源紧缺,我的后端系统迟迟等不来它的前端,没办法只好自己来写了.从html,js入门学起,然后照着vue.js的官方教程写了几个实例,从github上clone了一个不错的vue.js模版,填 ...
- LeetCode题解之 Subtree of Another Tree
1.题目描述 2.问题分析 判断一个节点,然后判断子树. 3.代码 bool isSubtree(TreeNode* s, TreeNode* t) { if (s == NULL) return f ...
- debian图形界面安装安装GNOME中文桌面环境_刀光剑影_新浪博客 - Google Chrome
debian图形界面安装安装GNOME中文桌面环境 (2012-06-12 16:47:41) 转载▼ 标签: 杂谈 分类: linux 安装GNOME中文桌面环境 安装基本的X系统 # apt-g ...
- Pycharm2017常用快捷键
Pycharm 的快捷键可以在[文件]-[设置]中自定义(见上图). 下方是根据网上资料整理的官方默认快捷键设置. 常用快捷键 Ctrl + / 行注释/取消行注释 Tab / Shift + Tab ...