代理鏈:它到底是如何運作的?

代理鏈:它到底是如何運作的?

所以我了解基本代理,以及它們如何透明地將連接轉發到目的地。我只是無法理解連結代理是如何工作的。

例如我有這個鏈:proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination

與普通的單一代理一樣,我們的請求被發送到代理,然後代理將其轉發到目的地,並發迴回應。但在代理鏈中,如何proxy1知道它必須將請求轉發到proxy2等等,而不是直接轉發到目的地?

是否是因為我們發送到代理鏈的請求中存在某種標頭,它適當地告訴代理將請求轉發到下一個代理?

答案1

我認為這是關於“CONNECT”HTTP 方法

在此機制中,用戶端請求 HTTP 代理伺服器將 TCP 連線轉送至所需的目的地。然後,伺服器繼續代表客戶端建立連線。伺服器建立連線後,代理伺服器將繼續代理往返客戶端的 TCP 流。請注意,只有初始連線請求是 HTTP - 此後,伺服器僅代理已建立的 TCP 連線。

最後一句話是關鍵。您要求proxy1代理連接到proxy2.然後接下來的所有內容都會轉到proxy2through proxy1,它不再解釋,因此您要求代理到,proxy3並且該請求被捕獲並解釋proxy2。下一個 CONNECT 請求(代理到proxy4)將通過proxy1proxy2,它將被proxy3- 解釋,依此類推。鏈中的每個代理都會解釋正好一個CONNECT請求,然後就變透明了。

透過初始資料包序列正確設定所有代理程式後,任何使用雙向 TCP 連線的內容都可以透過 CONNECT 隧道傳遞。

當心

並非所有 HTTP 代理伺服器都支援此功能,即使支援的伺服器也可能會限制該行為。

最後注意:在實驗時,如果您執行的程式使用 GET 而不是 CONNECT,您可能會在連結代理時遇到問題。 GET 不允許鏈接,這已被覆蓋這裡。您對代理連結的困惑可能是因為您更熟悉(即您認為的)GET 機制。

相關內容