代理链:它究竟如何工作?

代理链:它究竟如何工作?

所以我了解基本的代理,以及它们如何透明地将连接转发到目的地。我只是不明白链接代理是如何工作的。

例如我有这个链:proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination

与普通的单代理一样,我们的请求被发送到代理,然后代理将其转发到目的地,并发回响应。但是在代理链中,如何proxy1知道它必须将请求转发到proxy2,等等,而不是直接转发到目的地?

是不是因为我们发送给代理链的请求中有一些标头,它会适当地告诉代理将请求转发给下一个代理?

答案1

我认为这是“CONNECT”HTTP 方法

在此机制中,客户端要求 HTTP 代理服务器将 TCP 连接转发到所需目的地。然后,服务器继续代表客户端建立连接。一旦服务器建立了连接,代理服务器将继续代理往返于客户端的 TCP 流。请注意,只有初始连接请求是 HTTP - 此后,服务器只是代理已建立的 TCP 连接。

最后一句话是关键。您请求proxy1代理连接到proxy2。然后,接下来的所有内容都会proxy2通过proxy1,不再进行解释,因此您请求代理到proxy3,此请求被 捕获并解释proxy2。下一个 CONNECT 请求(代理到proxy4)将通过proxy1proxy2它将被 解释proxy3– 依此类推。链中的每个代理都会解释恰好一个CONNECT 请求,那么它就变得透明了。

通过初始数据包序列正确设置所有代理后,任何使用双向 TCP 连接的内容都可以通过 CONNECT 隧道。

当心

并非所有 HTTP 代理服务器都支持此功能,即使支持的服务器也可能会限制其行为。

最后说明:在实验过程中,如果您运行的程序使用 GET 而不是 CONNECT,则可能会遇到链接代理的问题。GET 不允许链接,这已涵盖这里您对代理链的困惑可能是因为您更熟悉(即您以 GET 机制来思考)。

相关内容