2

我有自定义 tcp 服务器在端口 5888(虚拟端口)上侦听。代理服务器侦听传入连接。当代理收到 HTTP 请求时,它应该将相同的请求中继到不同的服务器。

例如:

代理接收:http ://proxyserver.com/mypage.html 代理应中继:http: //MainServer.com/mypage.html

来自主服务器的响应应直接发送到请求客户端。

在将新的 HTTP 请求中继到主服务器之前,我使用套接字来接受连接并解析原始 HTTP 请求。这变得太复杂了,因为我必须将原始 HTTP 请求发送到主服务器,获取响应并将其发送到客户端机器。代理基本上成为中间人。我希望代理仅用于通信的一侧,即将主机地址更改为 MainServer,然后主服务器应负责将响应发送给请求客户端。

如何做到这一点?

4

1 回答 1

1

HTTP 通过从客户端发起到服务器的 TCP 连接工作。在存在代理的情况下,您至少需要两个连接——一个从客户端到代理,一个从代理到服务器。这两个连接在某种意义上是“独立的”,它们都传输标准的 HTTP 请求和响应。此处的代理充当终端服务器的客户端。

您想要的至少涉及三个 TCP 连接,并且需要在与发起 HTTP 请求的连接不同的连接上发送 HTTP 响应。这超出了 HTTP 本身的范围——客户端不知道它在其他地方需要第二个连接,以及如何将一个连接上的请求与另一个连接上的响应相匹配。您可以在 HTTP 中做的最好的事情是重定向到不同的服务器,例如,使用特殊生成的 URL 或其他东西。

请记住,HTTP 响应必须来自与原始请求相同的 TCP 连接。

于 2012-10-01T12:26:57.573 回答