1. HTTP 代理
百度百科是这么解释的:代理客户机的 HTTP 访问,主要代理浏览器访问网页,它的端口一般为80、8080、3128等。
百度百科实在是太模糊了我们来细致的说一下什么是 HTTP 代理,说 HTTP 代理,那我们首先就得来说一下 WEB 代理了。
代理,说白了就是“中介”,而 Web 代理(proxy)服务器是网络的中间实体。代理位于客户端和服务器之间,扮演“中间 人”的角色,在各端点之间来回传送 HTTP 报文。
Web 上的代理服务器是代表客户端完成事务处理的中间人。如果没有 Web 代理,HTTP 客户端就要直接与 HTTP 服务器进行对话。有了 Web 代理,客户端就可以与代理进行对 话,然后由代理代表客户端与服务器进行交流。客户端仍然会完成对事务的处理,但它是 通过代理服务器提供的优质服务来实现的。 HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。HTTP 客户端会向代理发送请求 报文,代理服务器必须像 Web 服务器一样,正确地处理请求和连接,然后返回响应。
同时,代理自身要向服务器发送请求,这样,其行为就必须像正确的 HTTP 客户端一样,要 发送请求并接收响应,我们大家来看一幅图:
如果要创建自己的 HTTP 代理,就要认真地遵循为 HTTP 客户端和 HTTP 服务器制定的规则。
1.1 代理的类别
代理分为了私有的代理和共享的代理
- 共享代理
大多数代理都是公共的共享代理。集中式代理的成本效率更高,更容易管理。某些代理应用,比如高速缓存代理服务器,会利用用户间共同的请求,这样的话,汇入同一个代理服务器的用户越多,它就越有用。
- 私有代理
专用的私有代理并不常见,但它们确实存在,尤其是直接运行在客户端计算机上的时候。有些浏览器辅助产品,以及一些 ISP 服务,会在用户的 PC 上直接运行一些小型 的代理,以便扩展浏览器特性,提高性能,或为免费 ISP 服务提供主机广告。
1.2 代理和网关的区别
代理 连接的是两个或多个使用相同协议的应用程序。而网关不一样,网关连接的则是两个或 多个使用不同协议的端点。网关 扮演的是“协议转换器”的角色,即使客户端和服务器使用 的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。
其实我们从图上看, HTTP 网关和 HTTP 代理之间的区别实在是很模糊,由于浏览器和服务器实现的是不同版本的 HTTP,代理也经常要做一些协议转换工作。而商业化的代理服务器也会实现网关的功能 来支持 SSL 安全协议、SOCKS 防火墙、FTP 访问,以及基于 Web 的应用程序。
1.2 为什么使用代理
代理服务器可以改善安全性,提高性能,节省费 用。代理服务器可以看到并接触到所有流过的 HTTP 流量,所以代理可以监视流量并对其 进行修改,以实现很多有用的增值 Web 服务。
我们来看一下几种具体的代理的使用方法
儿童过滤器:
小学在为教育站点提供无阻碍访问的同时,可以利用过滤器代理来阻止学生访问成人 内容。
文档访问控制
可以用代理服务器在大量 Web 服务器和 Web 资源之间实现统一的访问控制策略,创建审核跟踪机制。这在大型企业环境或其他分布式机构中是很有用的。 在集中式代理服务器上可以对所有访问控制功能进行配置,而无需在众多由不同组织管理、不同厂商制造、使用不同模式的 Web 服务器上进行经常性的访问控制升级。
安全防火墙
网络安全工程师通常会使用代理服务器来提高安全性。代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织。还可以提供用来消除病毒的 Web 和 E-mail 代理使用的那种挂钩程序,以便对流量进行详细的检查
小学在为教育站点提供无阻碍访问的同时,可以利用过滤器代理来阻止学生访问成人 内容。
文档访问控制
可以用代理服务器在大量 Web 服务器和 Web 资源之间实现统一的访问控制策略,创建审核跟踪机制。这在大型企业环境或其他分布式机构中是很有用的。 在集中式代理服务器上可以对所有访问控制功能进行配置,而无需在众多由不同组织管理、不同厂商制造、使用不同模式的 Web 服务器上进行经常性的访问控制升级。
安全防火墙
网络安全工程师通常会使用代理服务器来提高安全性。代理服务器会在网络中的单一安全节点上限制哪些应用层协议的数据可以流入或流出一个组织。还可以提供用来消除病毒的 Web 和 E-mail 代理使用的那种挂钩程序,以便对流量进行详细的检查
既然我们都知道了代理能够做些什么,那是不是需要知道他从哪里来,到哪里去呢?接下来我们就看看代理他落在哪里
1.3 代理位于何处
1.3.1 代理服务器的部署
根据用处的不同,都能把代理服务器安置在不同的地点,
- 出口代理
- 访问(入口)代理
- 反向代理
- 网络交换代理
1.4 代理是如何进行认证的
代理可以作为访问控制设备使用。HTTP 定义了一种名为代理认证(proxy authentication)的机制,这种机制可以阻止对内容的请求,直到用户向代理提供了有效的访问权限证书为止。
- 对受限内容的请求到达一台代理服务器时,代理服务器可以返回一个要求使用访问证 书的 407 Proxy Authorization Required 状态码,以及一个用于描述怎样提供这些证书 的 Proxy-Authenticate 首部字段
- 客户端收到 407 响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所需要 的证书。
- 只要获得了证书,客户端就会重新发送请求,在 Proxy-Authorization 首部字段中 提供所要求的证书。
- 如果证书有效,代理就会将原始请求沿着传输链路向下传送(参见图 6-25c);否 则,就发送另一条 407 应答。
其实说白了代理可以实现认证授权机制,然后对我们对内容的访问进行相对应的控制,如下图:
若传输链路中有多个代理,且每个代理都要进行认证时,代理认证通常无法很好地工作。 人们建议,应该对 HTTP 进行升级,将认证证书与代理链中特定的路标联系起来,但这些 升级措施并没有得到广泛实现。
代理所要注意的问题
代理服务器可能无法理解所有经其传输的首部字段。
有些首部可能比代理自身还要新;其 他首部可能是特定应用程序独有的定制首部。代理必须对不认识的首部字段进行转发,而 且必须维持同名首部字段的相对顺序。
关于 HTTP 代理,我就先说这么多,剩下的内容还有待大家一起进行发掘。
文章参考:
《图解 HTTP》
《HTTP 权威指南》
个人强烈推荐《图解 HTTP》这本书,作者是日本人,图解确实很清晰很帮助人理解。
我是懿,一个正在被打击却努力前进的码农。