作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。
 
                                                                               

一、什么是Web代理

Web代理(proxy)服务器是网络的中间实体。代理位于客户端和服务端之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文。某个客户端专用的代理为私有代理,众多客户端共享的代理称为公共代理
 
 
 

二、Web代理和网关的区别

代理:连接的是两个或多个使用相同协议的应用程序。
网关:连接的是两个或多个使用不同协议的端点。
 
 
 

三、为什么使用代理

1、儿童过滤器
 
假如在一个学校,既要对教育站点访问无障碍,又要使用代理来组织对成人内容的访问。
 

2、文档访问控制
 
使用代理服务器在大量Web服务器和Web资源之间实现统一的访问控制策略。如
a)允许客户端1无限制地访问服务器A的新闻页面
b)客户端2可以无限制地访问互联网
c)在允许客户端3访问服务器B之前,需要输入账号密码
 
 
 
3、安全防火墙
 
防火墙代理提高安全性,代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入另一组织。还可以提供用来消除病毒的Web和E-mail代理使用的那种挂钩程序,对流量进行详细的检查。

 
4、Web缓存
 
代理缓存维护了常用的文档的本地副本,并将他们按需提供,以减少缓慢且昂贵的网络通信。
 
5、反向代理
 
代理可以假扮Web服务器,这些反向代理的代理接收发给Web服务器的真实请求,与Web服务器不同的是它们可以发起与其他服务器的通信,以便按需定位所请求的内容。
 
6、内容服务器
 
代理服务器可以作为“内容服务器”使用,根据因特网流量状况以及内容类型将请求导向特定的Web服务器。也可实现各种服务级别的请求,比如用户付费需要提高性能,内容路由器可以将请求转发到附近的复制缓存。
 
7、转码器
 
代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码。如在传输GIF图片时,将其转换为JPEG图片;也可以对图片进行压缩。或者在传输文档的过程中将其转换成另一种语言(将英文文档转换为中文文档)。
 
8、匿名者
 
匿名者代理会主动从HTTP报文中删除身份特性(比如客户端IP地址、From首部、Referer首部、cookie、URI的session ID等),提高高度的私密性和匿名性。

四、代理服务器的位置

1、出口代理
将代理固定在本地网络的出口点,以便控制本地网络与互联网之间的流量。
 
2、访问入口代理
代理常被放在ISP(Internet Server Provider)互联网服务提供商访问点上,用以处理来自客户的聚合请求。ISP使用缓存代理来存储常用的文档副本,以提高用户的下载速度,降低因特网带宽耗费。
 
3、反向代理
代理通常会被部署在网络边缘,在Web服务器之前,作为替代物(反向代理)使用,它们可以处理所有传送给Web服务器的请求,并只在必要时向Web服务器请求资源。
 
4、网络交换代理
可以将具有足够处理能力的代理放在网络之间的因特网对等交换点上,通过缓存来减轻因特网节点的拥塞,并对流量进行监视。

五、代理的层级结构

 
可以通过代理层次结构将代理连接起来,代理层次结构的应用场景有:
 
1)负载均衡
子代理可能会根据当前父代理上的工作负载来决定如何选择一个负载均衡,达到负载均衡的作用
 
2)地理位置附近的路由
子代理可能会选择负责原始服务器所在物理区域的代理
 
3)协议/类型路由
子代理可能会根据URI将报文转发到不同的父代理和原始服务器上去
 
4)基于订购的路由
如果发布者为高性能额外付费了,他们的URI就会被转发到大型缓存或压缩引擎上去,以提高性能。
 

六、如何使客户端走向代理

客户端通常会直接与Web服务器进行通信,如何使得客户端的流量流向代理
 
1)修改客户端
 
将客户端配置为代理服务器,客户端就会将HTTP请求有意地直接发送给代理,而不是原始服务器。
 
 
2)修改网络
 
网络基础层设施通过若干技术手段,在客户端不知道或没有参与的情况下,拦截网络流量并将其导入代理。
 
3)修改DNS的命名空间
 
放在Web服务器的代理服务器(反向代理),会直接假扮Web服务器的名字和IP地址,这样所有的请求就会发送给这些反向代理服务器,而不得Web服务器。
 
4)修改Web服务器
 
将某些Web服务器配置为向客户端发送一条HTTP重定向命令(响应码305),将客户端请求重定向到一个代理上去,收到重定向命令后,客户端会与代理服务器进行通信。
 
 

七、追踪报文

1、Via首部
 
Via首部字段列出了与报文途径的每个中间节点有关的信息,报文每经过一个节点,都必须将这个中间节点添加到Via列表的末尾。
Via:1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com

Via首部字段用于记录报文的转发,诊断报文循环,标识请求、响应链上所有发送者的协议能力。

 
2、Via的语法
 
Via首部字段包含一个由逗号分隔的路标,每个路标都表示一个独立的代理服务器或网关。Via包括四个组件,一个可选的协议名(默认为HTTP),一个必选的协议版本,一个必选的节点名和一个可选的描述性注释。
Via:1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com
3、Via的请求和响应路径
 
请求和响应报文都会经过代理进行传输,因此请求和响应报文中都要有Via首部。请求和响应通常都是通过同一条TCP连接传送的,所以响应报文沿着与请求报文相同的路径回传。

4、Via与网关
 
有些代理会为非使用HTTP协议的服务器提供网关的功能,Via首部记录了这些协议的转换。
 
 
5、Trace方法
 
代理服务器可以在转发报文时对其进行修改。可以添加、修改或删除首部,也可以将主体部分转换成不同的格式。通过HTTP/1.1的TRACE方法,用户可以跟踪代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文进行修改的。
 

八、学习交流

欢迎大家关注我的公众号,一起交流、学习。

图解HTTP权威指南(四)| 代理的更多相关文章

  1. 图解HTTP权威指南 | HTTP报文

                                                                                    一.问题 1.报文流是如何流动的 2.H ...

  2. 图解HTTP权威指南(二)| 连接管理

    一.两个问题 1.HTTP是如何使用TCP连接的 2.HTTP的连接,并行连接.keep-alive(持久连接)和管道化连接   二.TCP连接 1.什么是TCP   TCP/IP是全球计算机及网络设 ...

  3. 图解HTTP权威指南(五) | HTTP缓存

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...

  4. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  5. 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)

    最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...

  6. 《Web性能权威指南》

    <Web性能权威指南> 基本信息 原书名:High performance browser networking 原出版社: O'Reilly Media 作者: (加)Ilya Grig ...

  7. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  8. 【Android实战】----从Retrofit源代码分析到Java网络编程以及HTTP权威指南想到的

    一.简单介绍 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明确为什么Retrofit那么屌. 近期也看了一些其源代码分析的文章以及亲自查看了源代码 ...

  9. [置顶] 【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的

    一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对 ...

随机推荐

  1. Python中定义文档字符串__doc__需要注意格式对齐的处理

    Python中的文档字符串是个很不错的提升代码交付质量.编写文档方便的特征,但是需要注意在使用文档字符串时,将文档字符串标识的引号对必须遵守缩进的规则,否则Python语法检查时会无法通过,而引号内的 ...

  2. 第15.32节 PyQt(Python+Qt)入门学习:containers容器类部件QToolBox工具箱介绍及使用案例

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  3. 第8.30节 重写Python __setattr__方法实现属性修改捕获

    一. 引言 在<第8.26节 重写Python类中的__getattribute__方法实现实例属性访问捕获>章节介绍了__getattribute__方法,可以通过重写该方法,截获所有通 ...

  4. 博客中css样式的正确设置

    一.简介 博客园的文章是支持html代码和css样式的,即使是markdown写作.当某个标签需要特制样式时,我们可以自定义样式来覆盖掉原本的样式. 二.css样式优先级 参考至>>菜鸟教 ...

  5. 如何实现OSM地图本地发布并自定义配图

    目录 1.缘起 2.准备环境 2.1.安装linux系统 2.2.安装docker 2.3.安装Docker Compose 2.4.安装git 3.发布地图 3.1.拉取代码 3.2.测试网络 3. ...

  6. [从源码学设计]蚂蚁金服SOFARegistry之推拉模型

    [从源码学设计]蚂蚁金服SOFARegistry之推拉模型 目录 [从源码学设计]蚂蚁金服SOFARegistry之推拉模型 0x00 摘要 0x01 相关概念 1.1 推模型和拉模型 1.1.1 推 ...

  7. Hadoop使用实例 词频统计和气象分析

    一.词频统计 下载喜欢的电子书或大量文本数据,并保存在本地文本文件中 编写map与reduce函数 本地测试map与reduce 将文本数据上传至HDFS上 用hadoop streaming提交任务 ...

  8. Shell变量、函数

    上篇文章初步认识了一下shell脚本及其简单的案例,下面我们再来讲一下shell的进击部分. 一.变量 1.常用系统变量:($HOME.$SHELL.$PWD.$USER) 2.自定义变量: 2.1. ...

  9. Scala中的IO操作及ArrayBuffer线程安全问题

    通过Scala对文件进行读写操作在实际业务中应用也比较多,这里介绍几种常用的方式,直接上代码: 1. 从文件中读取内容 object Main { def loadData(): Array[Stri ...

  10. Eureka系列(七) 服务下线Server端具体实现

    服务下线的大致流程图   下面这张图很简单地描述了Server端服务下线的大致流程: 服务下线Server端实现源码分析   Eureka服务实现是通过Server端InstanceResource ...