4

HTTP代理简介

 2 years ago
source link: https://www.cnblogs.com/TianFang/p/15957411.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

普通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代理的逻辑是一样的,因此可以很方便的实现他们之间的转换,甚至可以在一个端口上同时支持这三种代理协议(他们的解析方式不冲突)。

参考资料:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK