代理如何知道将请求转发到哪里?

代理如何知道将请求转发到哪里?

当代理收到连接时,代理如何知道将请求转发到哪里?
例如,Java我们可以为代理设置系统属性。
因此,我们设置IP代理的,并将请求发送到代理,但代理如何知道将实际请求转发到哪里?

答案1

代理有多种类型,每种类型都使用不同的方法向代理服务器传达它想要做的事情。

HTTP 代理仅理解 HTTP,不会尝试代理数据包,而是代理 HTTP 命令,如 connect、get、post 等。它们创建一个全新的数据包,该数据包以较低层为地址,从自身到目标服务器。当客户端发起连接时,http 流的第一个数据包包含 CONNECT 动词。代理接收该动词,如果需要,对其进行 DNS 查找,并使用 http 命令和从客户端收到的数据包中的数据流构建一个数据包发送到远程服务器。

SOCKS 代理在会话层之上执行隧道传输,因此客户端配置第 5 层标头,该标头告知代理您要连接的位置、传输协议信息,并通过代理所需的任何身份验证。客户端将第 6/7 层数据报放入第 5 层段的数据区域,然后将其发送到代理。代理接收它,创建一个新的数据包(没有 SOCKS 标头)发送到远程服务器,将客户端数据包中的第 6/7 层数据单元放入新数据包,然后将其发送到目标服务器。SOCKS 代理不适用于所有上层协议,但它们将代理大多数下层协议,包括 tcp 和 udp。

答案2

http 代理如何知道目的地/目标 URL 或将请求转发到哪里?

带有代理(服务器)的 Web 应用程序(客户端)流从HTTP CONNECT发送到代理服务器的请求开始,例如CONNECT www.my-proxy.com:443 HTTP/1.1

建立连接后,Web 应用程序(客户端)HTTP向代理发送正常请求,例如

GET / HTTP/1.1
Host: www.my-destination.com

代理会处理它们并将它们进一步转发到目的地。

相关内容