代理
代理作为客户端与服务器端的中介,既作为服务端又可以作为客户端,同两端通信传送报文。
公共代理
大多数代理是共享代理,集中式代理的效率更高,更容易管理。
私有代理
某个客户端专用的,不常见。
代理 vs 网关
代理连接的是两个或多个使用相同协议的应用程序;网关连接两个或多个使用不同协议的断电,完成协议转换角色。
实际中,代理跟网关的区别很模糊。对于使用不同版本的HTTP协议,代理也需要完成协议转换角色。另外商业化的代理服务器也会实现网关的功能来支持SSL安全协议、SOCKS防火墙、FTP访问以及web的应用程序。
代理的优点
· 改善安全性
· 提高性能
· 节省费用
安全防火墙
Web 缓存
反向代理
代理假扮web服务器,接收请求,可以发起与其他服务器的通信,按需定位所请求的内容。一般用来提高访问慢速web服务器上公共内容的性能。通常部署在网络边缘,位于web服务器之前。通过冒用web服务器的名字&ip,接收来自客户端的请求,在必要时向服务器请求资源,可以提高web服务器的安全性或者将较快的服务器缓存放在较慢的服务器之前,提高性能。
有趣的内容路由器
代理服务器可以作为内容路由器使用,根据因特网流量状况及内容类型将请求导向特定的web服务器
匿名者代理
匿名者代理主动从HTTP报文中删除身份特性(IP地址、From、Referer、cookie、uri会话ID等),提高私密性
层次结构的代理-动态选择父代理
1.负载均衡
子代理考虑均衡负载选择父代理
2.地理位置附近的父代理
子代理选择原始服务器所在物理区域的父代理
3.协议/类型路由
子代理根据URI将报文转发到不同的父代理和原始服务器上。特定协议类型URI通过特殊代理服务器转发
4.基于订购的路由
若发布者为高性能服务额外付费了,它们的URI会被转发到大型缓存或压缩引擎上去,用以提高性能。
如何使客户端流量流向代理
代理请求中的URI与服务器中的URI不同
Web服务器报文和web代理报文语法格式相同,唯一不同的是HTTP请求报文中的URI不同。
没有设置客户端代理时,发送部分URI —— 代理未出现时,客户端直接与单个服务器对话,避免发送冗余信息隐藏了已知的主机名和端口号
设置客户端使用代理时,发送完整URI;
拦截和反向代理是如何将服务器主机信息隐藏起来的
反向代理通过假扮服务器的主机名或ip地址,它会收到web服务器的请求,并向真正的服务器提供缓存的响应或代理请求。客户端无法区分反向代理和web服务器,因此会发送部分URI;
拦截代理是网络流量中的代理服务器,拦截从客户端发向服务器的请求,并提供缓存响应或对齐转发。由于拦截代理拦截了从客户端发往服务器端的请求,所以他会收到客户端请求的部分URIL;
修改URI规则
HTTP规范禁止一般的拦截代理在转发URI时重写其绝对路径部分,但是可以用“/”来取代空路径
代理是怎样影响浏览器的智能URI自动完成机制或主机名扩展特性的
无代理时URI解析
首先使用DNS查找主机,若查找失败,浏览器会对主机名自动扩展,再次请求DNS解析,直到请求成功,返回IP地址。
有显式代理时URI解析
浏览器不会对不完整的主机名自动扩展
有拦截代理时的URI解析
使用不可见的拦截代理,对客户端来说是没有代理的。跟无代理一样,浏览器会自动扩展主机名,直到DNS成功为止。
当使用拦截代理,并请求的是已经停用IP地址时,提供容错机制是很重要的。
报文追踪
Via首部
报文Via首部能够追踪报文途径的每个中间点(代理或网关)信息,报文每经过一个节点都必须将这个中间节点添加到via列表的末尾,由“,”分割。请求报文与响应报文都有Via首部。
Via = 1. 1 cache. joes- hardware. com, 1. 1 proxy. irenes- isp. net
Server首部
Server响应首部是对原始服务器使用的软件进行描述,如果响应报文是通过代理转发,一定要确保代理没有修改Server首部,因为Server首部是用于原始服务器的,代理应该添加Via首部
TRACE方法 vs Via
TRACE方法也用于追踪报文途径的点,防止代理在转发时修改报文或首部。当TRACE请求 到达目的服务器时,整条请求报文都会被封装在一条响应报文的主题中回送给发送端,客户端可以查看服务器收到的确切报文及它所经过的代理列表(仍旧在Via首部),TRACE响应的Content-Type为message/http 状态码 200 OK
Allow首部
Allow首部字段是请求首部,列出了请求URI标识的资源所支持的方法列表,如果Allow:*,即列出整个服务器所支持的方法列表。