HTTP CONNECT方法是什么,有什么用?

1,663 阅读1分钟

HTTP CONNECT 方法

在使用 Fiddler 抓包时,经常会看到一些 CONNECT 方法的请求。 这些请求有什么用呢?

我们使用 Fiddler 抓包,Fiddler 就成了我们的代理,它要把我们的请求转发出去,就必须知道我们的请求内容是什么:服务器域名是什么,端口是多少,请求的 URI 是什么,等等。否则它无法把我们的请求转发出去。这一点对于 HTTP 协议的请求不是什么问题,但对于 HTTPS 的请求,就有问题了。

因为 HTTPS 请求的网络包是经过加密的,代理无法知道我们的请求内容,自然也就无法转发。

那怎么办呢?

如果代理发现客户端发过来的请求是加密的、无法解析,这时它就会告诉客户端,它需要跟服务器建立一个隧道,以便转发 HTTPS 网络包。于是客户端就告诉代理要请求的服务器域名、端口号等,代理发一个 CONNECT 请求,跟服务器建立隧道,然后把这个隧道的唯一标识跟这个服务器绑定起来,并且返回给客户端。 下次客户端再发 HTTPS 请求到同一个服务器时,会带上隧道的标识,代理就知道通过哪个隧道来转发这个加密的网络包了。

给隧道增加唯一标识是因为,我们可以发起多个不同服务器域名的 HTTPS 请求,需要建立多条隧道,代理为了知道某一个 HTTPS 网络包是发给哪个隧道的,需要维护一张隧道 id 到隧道的映射表。

以上均为个人猜测,等待证明或者修正。