1、HTTP的代理服务器既是Web服务器又是Web客户端。
代理与网关的对比:代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。实际上,代理和网关之间的区别很模糊,代理也经常要做一些协议转换的工作。
2、代理可以作为儿童过滤器;文档访问控制;安全防火墙;Web缓存;反向代理(假扮Web服务器。接收发给Web服务器的真是请求,但与Web服务器不同的是它们可以发起与其他服务器的通信,以便按需定位所请求的内容);内容路由器;转码器;匿名者(匿名者代理会主动从HTTP报文中删除什么特性)
3、代理的层次结构
通过代理层级结构将代理级联起来。代理层次结构中的代理服务器被赋予了父和子的关系。下一个入口代理(靠近服务器)被称为父代理,下一个出口代理(靠近客户端)被称为子代理。代理服务器可以根据众多因素,将报文转发给一个不断变化的代理服务器和原始服务器集。
4、代理如何获取流量
修改客户端:很多Web客户端都支持手工和自动的代理配置。若将客户端配置为使用代理服务器,客户端都会将HTTP请求有意地直接发送给代理,而不是原始服务器。
修改网络:在客户端不知情的情况下,拦截网络流量并将其导入代理。这种拦截通常都依赖于监视HTTP流量的交换设备及路由设备。这种代理被称为拦截代理。
修改DNS的命名空间:放在Web服务器之前的代理服务器——反向代理,会直接假扮Web服务器的名字和IP地址,这样,所有的请求就会发送给这些反向代理,而不是服务器了。要实现这一点可以手工编辑DNS名称列表,或者用特殊的动态DNS服务器根据需要来确定适当的代理或服务器。
修改Web服务器:可以将某些Web服务器配置为向客户端发送一条HTTP重定向命令,将客户端请求重定向到一个代理上去。
5、与代理请求有关的一些棘手问题
5.1、客户端向代理和服务器发送请求时,HTTP请求报文中的URI会有所不同。没有设置代理的客户端向服务器发送请求时会发送部分URI,设置代理的客户端发送完整URI。
5.2、虚拟主机面临的问题和代理一样,虚拟主机Web服务器需要知道目的Web站点的主机名,通过Host首部来承载主机和端口信息。
5.3、根据是否有代理,浏览器对请求URI的解析会有不同。没有代理时,浏览器会获取URI,尝试寻找响应的IP,若没有找到主机,很多浏览器都会尝试着提供某种主机名自动”扩展“机制,以防用户输入的是缩写形式。但是如果有显式代理,那么用户的URI会直接发送给代理,浏览器不再执行这一扩展功能,而是交给代理来做。
6、追踪报文
via首部字段列出了与报文途径中的每个中间节点有关的信息。代理也可以用via首部来检测网络中的路由循环。代理应该在发送一条请求之前,在via首部插入一个与其自身有关的独特字符串,并在输入的请求中查找这个字符串,以检测网络中是否存在路由循环。
每个via中的中间节点的格式最多包含4个组件:一个可选的协议名,一个必选的协议版本,一个必选的节点名和一个可选的描述性注释。
关于via的隐私问题:有时候,我们并不希望在via字符串中使用确切的主机名。总的来说,除非显式地允许这种行为,否则当代理服务器作为网络防火墙的一部分使用时,是不应该转发防火墙后面那些主机的名字和端口号的,因为防火墙后面的网络结构信息可能会被恶意群体利用。
7、通过HTTP/1.1的TRACE方法,用户可以跟踪经代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文进行修改的。通常,不管中间插入了多少代理,TRACE报文都会沿着整条路径传到目的服务器上。可以使用Max-Forwards首部来限制TRACE和OPTIONS请求所经过的代理跳数,来查看在代理链的任意一跳上接收到的请求。
8、代理认证
代理可以作为访问控制设备使用。HTTP定义了一种名为代理认证的机制,这种机制可以阻止对内容的请求,直到用户向代理提供了有效的访问权限证书为止。