1. 程式人生 > >http tunnel && http connect method

http tunnel && http connect method

http tunnel和connect現象

在fiddler抓包時,出現了很多 tunnel to,圖示是把鎖,看右側的詳情,發現使用的http connect方法。如下圖
這裡寫圖片描述

查了很多資料後,總結如下
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)環境如下圖
這裡寫圖片描述

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)