HTTP代理简介

普通http代理

传统的http代理在RFC 7230 - HTTP/1.1: Message Syntax and Routing中定义,其流程如下

  1. 浏览器请求不直接发给目标主机,而是发给代理服务器
  2. 代理服务器从请求头中解析并连接目标主机,并转发请求和响应。

整个过程如下图所示,

这个代理本质上是一个中间人角色:对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报文

隧道代理

普通http代理存在着一个问题是:代理服务器是一个中间人角色,它获取了传输内容,并且有修改内容的能力。因此和反中间人的tls协议冲突,因此是不能用此代理访问https站点的的。因此,一个新的代理模式Tunneling TCP based protocols through Web proxy servers(通过 Web 代理服务器用隧道方式传输基于 TCP 的协议)应运而生。

隧道代理的流程本身也比较简单

  1. 客户端连接代理服务器,通过connect协议发送目标主机
  2. 代理服务器连接到目标主机后,完成connect握手。并对客户端和服务器之间的后继数据进行盲转发

整个流程如下图:

隧道代理模式下,代理服务器除了目标主机外,无需了解任何内容,也无法了解任何内容。只是作为一个透明的管道。

小结

其实综合这两种模式,他们的逻辑行为其实是一样的

  1. 根据某种约定获取目标地址:(普通代理是从http头,隧道代理是connect命令)
  2. 完成和目标主机的连接,以及客户端的握手。(普通代理转发http头,隧道代理回复200报文)
  3. 作为隧道转发两端流量

进行此抽象后,我们可以发现他其实和sock5代理的逻辑是一样的,因此可以很方便的实现他们之间的转换,甚至可以在一个端口上同时支持这三种代理协议(他们的解析方式不冲突)。

参考资料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章