通过HTTP(s)代理模拟TCP连接的正确方法是什么?

时间:2011-05-26 12:46:25

标签: http proxy tcp

我的一个应用程序连接到通常安装在不同计算机上的服务器模块,有时在互联网上。在某些部署方案中,用户没有直接的Internet访问权限 - 只有HTTP(s)代理服务器。所以我需要教我的程序使用HTTP代理来模拟到服务器的异步TCP连接。有关此主题的互联网上有很多信息,使用HTTPS代理非常简单 - 只需将“HTTP CONNECT”发送到服务器应用程序的端口443,发送回响应,您就可以根据需要发送和接收二进制数据。 / p>

但是有些用户在代理服务器上禁用了HTTPS,所以他们只有HTTP。由于代理主动检查流量,尝试缓存,累积等,HTTP存在许多问题。具有一个无限“GET”HTTP请求和一个无限HTTP响应的2个连接起作用,但不同的代理提供不同的问题 - 对于例如,Microsoft IIS不会立即发送小块数据并尝试累积它们:(。

所以我的问题是:在没有HTTPS支持的情况下,通过HTTP代理模拟全双工TCP连接是否是一些成熟的技术?也许是我可以使用或购买的一些开源或商业实施?任何提示都是受欢迎的!我真的不想创建一个只能在少量代理上工作的解决方案,所以我需要已经存在且经过测试的实现或者好的手册:)。

2 个答案:

答案 0 :(得分:4)

这是关于SO的其他几个问题。

一般来说,您不能假设HTTP代理允许您通过连接进行TCP / IP流式传输。这是HTML5 WebSockets工作组中已经详细讨论过的内容。

在某些情况下,您可以使用CONNECT谓词发出HTTP请求,要求代理生成到目标服务器/端口组合的“盲”双向隧道。但是,代理可能会拒绝为443以外的任何目标端口执行此操作(以防止您正在尝试执行的操作),并且代理可能会尝试扫描或以其他方式更改您发送给它的流量。

相比之下,SOCKS代理旨在完成你正在尝试做的事情。但SOCKS代理相对不常见。

答案 1 :(得分:3)

有几种现有的解决方案可以在HTTP上模拟长期存在的TCP连接。

XMPP中广泛使用的技术之一是BOSH specification。尽管BOSH最初是由Jabber / XMPP社区开发的,但它不仅限于XMPP,而且可以传输任意有效负载,例如XML或JSON。

以下是其他有用的资源: