代理类型
公共代理
众多客户端共享的代理被称为公共代理
大多数代理都是公共的共享代理。集中式代理的成本效率更高,更容易管理。某些代理应用,比如高速缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。
私有代理
单个客户端专用的代理被称为私有代理。
专用的私有代理并不常见,但它们确实存在,尤其是直接运行在客户端计算机上的时候。有些浏览器辅助产品,以及一些ISP服务,会在用户的PC上直接运行一些小型的代理,以便扩展浏览器特性,提高性能,或为免费ISP服务提供主机广告。
为什么要使用代理-代理的作用
它们可以改善安全性,提高性能,节省费用。里给出了几种代理使用方法的示例
儿童过滤器
可以利用过滤器代理来阻止学生访问成人内容。如下图所示
文档访问控制
集中式访问控制代理:
- 允许客户端1无限制地访问服务器A的新闻页面;
- 客户端2可以无限制地访问因特网;
- 在允许客户端3访问服务器B之前,要求其输入口令。
安全防火墙
Web缓存
反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。和反向代理不同之处在于,典型的正向代理是一种最终用户知道并主动使用的代理方式
转码器
代理服务器在将内容发送给客户端之前,可以修改内容的主体格式。在这些数据表示法之间进行的透明转换被称为转码(transcoding)
部署代理的位置
按部署代理的位置代理可以分为一下几种:
1、出口代理:部署在本地网络端,用于保护本地网络或者限制公司带宽
2、访问(入口)代理:用于实现提供缓存响应
3、反向代理:部署在服务器端本地网络上,用于实现更精确的请求和提供性能
4、网络交换代理:部署在网络上,用于检测流浪等
代码层次结构
代理层次结构描述的代理的部署层级结构,比如一级代理,二级代理等,这是一种静态层级结构,有父代理和子代理的概念,离原始服务器进的的代理是离服务器远的代理的父代理!但是代理层级不应该静态的,而应该可以是动态的,以保证代理可以根据实际网络负载情况而下发报文到不同的代理!从而产生的动态层级代理概念有负载均衡、地理位置附近的路由等!
http请求报文流量导入代理
http请求报文是怎么进入代理的,描述的怎么把http请求报文流量导入代理!主要有一下几种方式:
1、修改客户端:比如现在的客户端都支持收手动和自动配置代理!
2、修改网络:网络通过一些技术在客户端不知情的情况揽入流量进入代理!
3、修改dns命名空间:把主机名映射为代理的ip地址,比如修改系统的dns映射文件,让代理伪装成原始服务器,从而把web请求导入代理!
4、修改服务器:让服务器返回一个重定向有关的代码,把http请求报文导入到代理!
客户端代理的配置
显式的手工配置
预先配置浏览器
代理的自动配置,通过PAC动态计算代理的设置,选择合适的代理服务器
代理的URI和服务器的URI的不同
客服端向web服务器发送请求时,请求行只包含部分URI,但向代理发送请求时,请求行包含所有的URI
处理规则
1、如果提供的是完整URI,代理就应该使用这个完整URI。
2、如果提供的是部分URI,而且有Host首部,就应该用Host首部来确定原始服务器的名字和端口号。
3、如果提供的是部分URI,而且没有Host首部,就要用其他方法来确定原始服务器:
1. 如果代理是代表原始服务器的替代物,可以用真实服务器的地址和端口号来配置代理;
2. 如果流量被拦截了,而且拦截者也可以提供原始的IP地址和端口,代理就可以使用拦截技术提供的IP地址和端口号;
3. 如果所有方法都失败了,代理没有足够的信息来确定原始服务器,就必须返回一条错误报文(通常是建议用户升级到支持Host首部的现代浏览器)。
URI 的客户端自动扩展和主机名解析
没有代理是URI的解析
浏览器会对主机名进行自动扩展,直到找到一个有效主机名为止
有显示代理URI的解析
浏览器不会对主机名进行自动扩展,发送给代理时,只会对加默认方案和路径
有拦截代理时URI的解析
此时,对于客户端来说是没有代理的,浏览器会自动扩展主机名
追踪报文
Via首部
Via首部字段会列出与报文途径的每个中间节点有关的信息,没过一个代理或网关,就会在尾部加一个代理或网关的信息
注意,每个Via路标中最多包含4个组件:
1. 一个可选的协议名:中间节点收到的协议,默认为HTTP;
2. 一个必选的协议版本;
3. 一个必选的节点名;
4. 一个可选的描述性注释
TRACE
通过HTTP/1.1的TRACE方法,朱总经代理传输的请求报文,以及每个代理如何对请求报文进行修改的
当TRACE请求到达目的服务器时,整条请求报文都会被封装在一条HTTP响应的主体中回送给发送端(参见图6-23)。当TRACE响应到达时,客户端可以检查服务器收到的确切报文,以及它所经过的代理列表(在Via首部)。TRACE响应的Content-Type为message/http,状态为200 OK
Max-Forwards
可以使用Max-Forwards(最大转发次数)首部来限制TRACE和OPTIONS请求所经过的代理跳数
如果Max-Forwards的值为零(Max-Forwards:0),那么即使接收者不是原始服务器,它也必须将TRACE报文回送给客户端,而不应该继续转发。
代理认证
对受限内容的请求到达一台代理服务器时,代理服务器可以返回一个要求使用访问证书的407 Proxy Authorization Required状态码,以及一个用于描述怎样提供这些证书的Proxy-Authenticate首部字段
代理认证的处理过程
1、客户端收到407响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所需要的证书。
2、只要获得了证书,客户端就会重新发送请求,在Proxy-Authorization首部字段中提供所要求的证书。
3、如果证书有效,代理就会将原始请求沿着传输链路向下传送(如上图所示);否则,就发送另一条407应答。
Proxy-Authorization
<type>
身份验证类型。一个常见的类型是 "Basic"。
<credentials>
凭证的构成方式如下:
将用户名和密码用冒号拼接(aladdin:opensesame)。
将拼接生成的字符串使用 base64 编码方式进行编码(YWxhZGRpbjpvcGVuc2VzYW1l)。
处理代理不支持的首部和方法
代理必须对不认识的首部字段进行转发,而且必须维持同名首部字段的相对顺序。类似地,如果代理不熟悉某个方法,那么只要可能,就应该尝试着将报文转发到下一跳节点上去。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。