【问题标题】:Relay a request from client to Server via Proxy using sockets c#使用套接字c#通过代理将请求从客户端中继到服务器
【发布时间】:2012-09-22 06:51:53
【问题描述】:

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

例如:

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

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

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

如何做到这一点?

【问题讨论】:

  • 代理定义的中间人。除非代理直接传递有关源的信息,否则目标(主服务器)无法直接回复源。并且由于主服务器将回复没有直接向它发起请求的源机器,因此源机器将需要一个始终侦听连接的进程。这是一个完全定制的要求。我很好奇,你想完成什么?

标签: c# sockets tcp proxy


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多