作者简介

李先生(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. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget提供的currentItem当前项操作访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 当前项是指当前鼠标和键盘焦点所在项,在项可以进行选择操作时,当前项可以是选中状态,也可以是未选中状态 ...

  2. PyQt(Python+Qt)学习随笔:QTableView的cornerButtonEnabled属性

    老猿Python博文目录 老猿Python博客地址 cornerButtonEnabled属性用于控制是否启用左上角的按钮.如果此属性为True,则启用视图左上角的按钮,单击此按钮将选择表视图中的所有 ...

  3. bootstrap 扩展参数

    后台接受的参数形式 前端加载bootstrap时做的处理

  4. BJOI2015 隐身术

    落谷. Description 给你两个串 \(A.B\).询问 \(B\) 中有多少个非空子串和 \(A\) 的编辑距离不超过 \(K\). Solution 发现 \(K \le 5\),考虑可以 ...

  5. 软件工程与UML的第一次课

    | 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzzcxy/2018SE1 | | 这个作业要求在哪里 | https://edu.cnblogs.com ...

  6. html+css一些简单案例:爱心点击,盒子模型,2d动画

    canvas绘制爱心 效果预览 上代码 <!doctype html> <html> <head> <title>HTML5 Canvas爱心飘动动画特 ...

  7. css进阶 04-如何让一个元素水平垂直居中?

    04-如何让一个元素水平垂直居中? #前言 老板的手机收到一个红包,为什么红包没居中? 如何让一个子元素在父容器里水平垂直居中?这个问题必考,在实战开发中,也应用得非常多. 你也许能顺手写出好几种实现 ...

  8. js上 十八、字符串

    十八.字符串 #18.1.认识字符串 #什么是字符串 字符串可以是引号中的任意文本.字符串可以由双引号(")或单引号(')表示 ,如 'hello' , "中国" #为什 ...

  9. vue第十七单元(电商项目逻辑处理,电商划分)

    第十七单元(电商项目逻辑处理,电商划分) #课程目标 1.什么是电商项目 2.什么是B2B,B2C,C2C模式,常见的电商项目 3.移动端电商项目常见的逻辑处理 4.[知识扩展]传统系统架构及分布式系 ...

  10. 工作三年!全靠大佬的Java笔记,年底跳槽阿里涨了10K

    前言 不论是校招还是社招都避免不了各种⾯试.笔试,如何去准备这些东⻄就显得格外重要,之前8月底阿里的人事部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给阿里hr,人事审核后经过一些列 ...