打开一个网站并不是直接访问的Web服务器,基本上都是通过代理进行访问的.所以这一章就介绍了代理种类,代理的工作方式,为何要使用代理,如何设置代理,代理存在的问题及如何追踪检测代理
6.1 代理是什么
代理是客户端和服务器之间的一个中间人,既是客户端也是服务器...
-
代理分哪几类
- 私有代理
- 共享代理
-
共享代理的应用
- 调整缓存服务器(CDN)
-
私有代理的应用
- 扩展浏览器特性
- 提高性能
- 免费ISP的主机广告
-
代理与网关的区别
- 代理只是接收和转发HTTP请求
- 网关接收HTTP请求,但可以转换成其他任何协议获取数据进行返回
- 实质上,现代的代理也支持协议转换功能了
6.2 为什么使用代理
- 儿童过滤器
- 文档访问控制
- 在大型企业和分布式机构中应用
- 集中控制每台电脑的联网能力
- 防火墙
- 限制进出流量
- 对进入报文扫描杀毒
- Web缓存
- CDN
- 反向代理
- 保障源服务器安全
- 提升访问性能(着实不知道是怎么提升性能的...难道就是把处理请求和获取资源的运算分开这么简单?)
- 内容路由器
- 这个没看懂
- 转码器
- 压缩视频图片大小
- 翻译英文到中文等
- PC版转成WAP版
- 匿名者
- 删除客户端身份信息进行再向下转发
6.3 代理的工作方式
6.3.1 代理可以部署在什么地方
- 出口代理: 放在本地网络的出口点
- 控制本地网络和Internet之间的流量
- 防火墙
- 控制上传下载速度
- 儿童过滤
- 访问(入口)代理: 放在ISP访问点上
- 处理客户端的聚合请求
- CDN
- 反向代理: 放在Web服务器之前
- 提高服务器的安全和性能
- 网络交换代理: 放在对等交换节点上
- 可是对等交换节点是啥,难道是国与国之间的连接点么?
6.3.2 代理的层次结构
从客户端到服务器之间会有N个串联的代理.正常情况下,报文会按照串连顺序转发报文.
-
靠近客户端的叫子代理
-
靠近服务器的叫父代理
-
动态选择父代理(而不是选中串联中的父代理)的几种情况
- 如果请求的是CDN资源,就会直接转发到CDN服务器
- 如果请求的是压缩图片,就会转发到压缩服务器,由压缩服务器请求到图片压缩后回传
- 如果父代理很慢,转发到其他父代理
- 如果有一个离服务器更近的父代理,则转发到那儿去
- 协议/类型路由: 没看懂
6.3.3 代理是如何获取流量的
- 修改客户端
- 直接修改浏览器的代理设置,让流量从代理走
- 修改网络
- 拦截代理(如路由器,交换机等)直接把流量转发到其他代理身上
- 修改DNS
- 直接把IP解析到一个代理上(反向代理),而不是原来的服务器
- 修改服务器
- 服务器直接返回一个重定向到代理上
6.4 如何设置代理
- 手动设置
- 即在浏览器的代理设置里面手动添加
- PAC文件自动配置
- 就是把手动设置升级为JS代码管理,做个条件判断
- 因为没有代理网址,所以无法测试,具体语法参考P149
- WPAD协议
- 相当于不用自己写PAC文件,而是自动搜索PAC文件
- 这个感觉有点复杂,且生产中短时间用不到,所以不做笔记了
6.5 代理存在的问题
6.5.1 代理会影响请求URI
-
请求中的URI有什么影响
- 客户端默认会发送相对路径的请求连接
- 显示代理会要求客户端发送完整路径的请求连接
-
为什么要求发送完整的URI
- HTTP设计之初没有代理,所以只发送相对路径也能找到资源
- 但是代理出来后,还用相对路径的话,就会连不上服务器
- 网关也无法定位资源
6.5.2 代理会要求HOST
- 为什么需要HOST
- HTTP设计之初,一台设备就是一个服务器
- 虚拟主机出来后,请求了一个资源,不知道是定位到哪个服务器
- 所以要用HOST来识别
6.5.3 代理会收到相对URI
- 哪些情况下代理会收到相对URI请求
- 客户端没有显示设置代理
- 不知情的情况下连接到代理上了
- 反向代理
- 拦截代理
- 代理接收到相对URI时怎么处理
- 如果有HOST首部,则用HOST首部拼接相对URI再转发
- 如果是反向代理,则用真实IP拼接相对URI映射资源
- 如果是拦截代理且能获取真实IP,则用真实IP拼接相对URI再转发
- 否则返回错误报文,要求浏览器升级到支持HOST的版本
6.5.4 修改URI导致访问失败
有些代理在转发的时候,会按照规范校准报文,期望是好的,但是经常导致访问失败
书上是这样讲的,反正我没见过~~~~~~
这里其实涉及到了一个为人处事的道理,和前面提到的一个严于律己,宽以待人的道理差不多.对别人提供的东西,不做强制要求,即使别人的不符合规范,因为可以他们那种形式能够正常工作,而你按照正确的规范去修改了,结果反而导致别人无法工作了.其中说到了一个名称,协议警察.这好像和说美国是世界警察一样的道理..
6.5.5 对URI自动扩展的影响
-
URI自动扩展的流程是什么
- 用户输入一个单词
- 用这个单词去DNS上解析,解析成功直接访问IP(IP会有多个,会访问到成功的那个为止)
- 解析失败则添加www.开头和.com结尾
- 再去DNS解析,解析成功直接访问IP
-
为什么会对URI自动扩展有影响
- 默认会自动扩展
- 显示代理后就不会自动扩展了
- 拦截代理可能导致连接失败
-
为什么拦截代理可能会导致连接失败
- 浏览器自动扩展出了IP地址
- 然则DNS出来的IP地址是一个列表
- 前面几个IP地址可能失效
- 所以要一个一个试,试到正确为止
- 结果请求被发到了拦截代理上
- 这时浏览器认为连接成功
- 但这时拦截代理与IP握手时才发现连接失败
- 浏览器自动扩展出了IP地址
-
怎么解决拦截代理导致失败的可能
- 拦截代理发现连接失败时
- 要反查DNS获取IP列表再尝试连接
- 或者采用其他容错机制
6.6 如何检测代理
6.6.1 Via首部
- Via是什么
- 列出了报文途径的每个中间节点的有关信息
其实如果我是一个中间节点,但是我不想留,你还不是拿我没办法.所以要打起战来这也是一个卵的功能
-
Via有什么用
- 记录报文的转发
- 诊断报文循环
- 标志转发链路上参考者的协议能力
-
Via的语法
- 由1到多个waypoint组成
- waypoint = recieved-protocol协议版本 recieved-by主机名 [comment注释]
-
Via存在什么问题
- 如果把防火墙后面的主机信息带出去,可能会被恶意利用
- 比如基地组织可以猜到国防局里面有哪些部门:(...
-
怎么解决这个问题
- 代理(防火墙)转发时要隐藏真实名称
- 然后维护一个真实虚假名称的对照表
6.6.2 Trace首部
-
为什么要诊断代理网络
- 报文可能会被代理修改,需要搞清楚谁改了
- 实现代理的厂商越来越多,出现的问题越来越多,需要调试
-
Trace的作用
- 观察报文经过了哪些代理
- 代理对报文是怎样修改的
-
Trace如何工作的
- Trace请求到达服务器后
- 服务器会把收到的报文,原封不动的返回给客户端
-
Max-Forwards是什么
- 是一个整数
- 用于标注要经过几跳代理
-
Max-Forwards怎么工作
- 客户端发出一个正整数
- 每经过一个代理减1后再转发
- 收到0的时候,不管是不是服务器,都要返回响应给客户端
6.7 代理认证
-
为什么需要代理认证
- 提供访问权限控制
- 比如晚上只有老师才能访问网络
-
代理认证怎么工作
- 代理收到请求
- 代理返回407 Proxy-Authorization
- 客户端提供Proxy-Authorization首部
- 代理认证首部,通过则转发
-
代理认证存在的问题
- 如果传输链路上有多个代理
- 且每个代理都要求进行认证时,就比较麻烦了
6.8 代理的互操作性
-
为什么会存在互操作性问题
- 代理由不同的厂商实现,实现的标准不一样,所以之间沟通肯定会存在问题
- 其实我都不知道互操作性是个啥玩意儿...咳,不追究了,反正就是容易出错的意思
-
如何避免互操作性问题
- 对于不认识的首部,直接转发
- 维持同名首部的相对顺序
这里还介绍了OPTIONS方法和Allow首部,可是他们和互操作性有毛关系啊?