http tunnel && http connect method

http tunnel和connect现象

在fiddler抓包时,出现了很多 tunnel to,图标是把锁,看右侧的详情,发现使用的http connect方法。如下图
http tunnel && http connect method_第1张图片

查了很多资料后,总结如下
connect是为了建立http tunnel,connect是http众多方法中的其中一种,它跟post、get、put、options方法是并列的。但是它的使用场景很特殊。只有在受限制的网络环境中(防火墙、NAT、代理器)并且是https通信时,客户端使用http connect请求代理服务器,代理服务器使用connect方法与目标服务器建立http tunnel,通道建立后,客户端与服务器进行通信,代理服务器就像透明一样,只是接收、转发tcp stream。


为什么要建立http tunnel呢?
这是因为,网络环境受限,客户端无法直接访问某些网络,所以只能通过代理服务器访问网络,然后,将内容转发给客户端,从宏观上看,客户端与服务器端就像建立了一条隧道一样。
但是由于http tunnnel可控性不强,所以,服务器通常会限制"可connect的端口"(一般只开放SSL的443端口)

关于NAT(network address translation)环境如下图
http tunnel && http connect method_第2张图片

fiddler抓包出现大量connect tunnel连接

如果理解了上边的话,那么也就明白了为什么fiddler抓包时,出现大量connect连接?
因为fiddler是代理,访问百度网页(使用了https协议),满足了使用connect条件,所以客户端会使用connect方法与目标服务器建立http tunnel,一旦connection建立完成,后续fiddler会转发、接收所有的tcp stream。

当然,并不是所有的受限网络(restricted network),https通信时,都会使用connect建立http tunnel,如果目标服务器限制connect方法,那么就会使用其它方法来建立通道(post/get);如果服务器不支持http tunnel,那么就需要安装http tunnel server端的程序,客户端不支持http tunnel,那么客户端就需要安装http tunnel client程序;http tunnel程序包含两部分,server端程序和client端程序;

援引《图解http》的话

援引《图解HTTP》一书中,关于connect方法的描述

connect:要求用隧道协议连接代理
connect方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行tcp通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

参考

[http://www.tuicool.com/articles/rq2I7zE](http://www.tuicool.com/articles/rq2I7zE)
[http://www.wuzesheng.com/?p=2168](http://www.wuzesheng.com/?p=2168)
[http tunnel wiki](https://en.wikipedia.org/wiki/HTTP_tunnel)

9年全栈开发经验,请关注个人公众号

http tunnel && http connect method_第3张图片

你可能感兴趣的:(fiddler,http,https)