OwenJi 2019-11-15
百度百科是这么解释的:代理客户机的 HTTP 访问,主要代理浏览器访问网页,它的端口一般为80、8080、3128等。
百度百科实在是太模糊了我们来细致的说一下什么是 HTTP 代理,说 HTTP 代理,那我们首先就得来说一下 WEB 代理了。
代理,说白了就是“中介”,而 Web 代理(proxy)服务器是网络的中间实体。代理位于客户端和服务器之间,扮演“中间 人”的角色,在各端点之间来回传送 HTTP 报文。
Web 上的代理服务器是代表客户端完成事务处理的中间人。如果没有 Web 代理,HTTP 客户端就要直接与 HTTP 服务器进行对话。有了 Web 代理,客户端就可以与代理进行对 话,然后由代理代表客户端与服务器进行交流。客户端仍然会完成对事务的处理,但它是 通过代理服务器提供的优质服务来实现的。 HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。HTTP 客户端会向代理发送请求 报文,代理服务器必须像 Web 服务器一样,正确地处理请求和连接,然后返回响应。
同时,代理自身要向服务器发送请求,这样,其行为就必须像正确的 HTTP 客户端一样,要 发送请求并接收响应,我们大家来看一幅图:
如果要创建自己的 HTTP 代理,就要认真地遵循为 HTTP 客户端和 HTTP 服务器制定的规则。
代理分为了私有的代理和共享的代理
大多数代理都是公共的共享代理。集中式代理的成本效率更高,更容易管理。某些代理应用,比如高速缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。
专用的私有代理并不常见,但它们确实存在,尤其是直接运行在客户端计算机上的时候。有些浏览器辅助产品,以及一些 ISP 服务,会在用户的 PC 上直接运行一些小型 的代理,以便扩展浏览器特性,提高性能,或为免费 ISP 服务提供主机广告。
代理 连接的是两个或多个使用相同协议的应用程序。而网关不一样,网关连接的则是两个或 多个使用不同协议的端点。网关 扮演的是“协议转换器”的角色,即使客户端和服务器使用 的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。
其实我们从图上看, HTTP 网关和 HTTP 代理之间的区别实在是很模糊,由于浏览器和服务器实现的是不同版本的 HTTP,代理也经常要做一些协议转换工作。而商业化的代理服务器也会实现网关的功能 来支持 SSL 安全协议、SOCKS 防火墙、FTP 访问,以及基于 Web 的应用程序。
代理服务器可以改善安全性,提高性能,节省费 用。代理服务器可以看到并接触到所有流过的 HTTP 流量,所以代理可以监视流量并对其 进行修改,以实现很多有用的增值 Web 服务。
我们来看一下几种具体的代理的使用方法
儿童过滤器:
小学在为教育站点提供无阻碍访问的同时,可以利用过滤器代理来阻止学生访问成人 内容。
文档访问控制
可以用代理服务器在大量 Web 服务器和 Web 资源之间实现统一的访问控制策略,创建审核跟踪机制。这在大型企业环境或其他分布式机构中是很有用的。 在集中式代理服务器上可以对所有访问控制功能进行配置,而无需在众多由不同组织管理、不同厂商制造、使用不同模式的 Web 服务器上进行经常性的访问控制升级。
安全防火墙
网络安全工程师通常会使用代理服务器来提高安全性。代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织。还可以提供用来消除病毒的 Web 和 E-mail 代理使用的那种挂钩程序,以便对流量进行详细的检查。
反向代理
其实这个反向代理才是我们需要使用的,代理可以假扮 Web 服务器。这些被称为替代物(surrogate)或反向代理(reverse proxy)的代理接收发给 Web 服务器的真实请求,但与 Web 服务器不同的是,它们可以发起与其他服务器的通信,以便按需定位所请求的内容。可以用这些反向代理来提高访问慢速 Web 服务器上公共内容时的性能。在这种配置 中,通常将这些反向代理称为服务器加速器(server accelerator),还 可以将替代物与内容路由功能配合使用,以创建按需复制内容的分布式网络。
既然我们都知道了代理能够做些什么,那是不是需要知道他从哪里来,到哪里去呢?接下来我们就看看代理他落在哪里
1.3.1 代理服务器的部署
根据用处的不同,都能把代理服务器安置在不同的地点,
代理可以作为访问控制设备使用。HTTP 定义了一种名为代理认证(proxy authentication)的机制,这种机制可以阻止对内容的请求,直到用户向代理提供了有效的访问权限证书为止。
其实说白了代理可以实现认证授权机制,然后对我们对内容的访问进行相对应的控制,如下图:
若传输链路中有多个代理,且每个代理都要进行认证时,代理认证通常无法很好地工作。 人们建议,应该对 HTTP 进行升级,将认证证书与代理链中特定的路标联系起来,但这些 升级措施并没有得到广泛实现。
代理服务器可能无法理解所有经其传输的首部字段。