TCP over HTTP, 可能否?

    因为一开始没有考虑到SSL的情况,所以做出了1.0.1之后,就发现不少网站都需要SSL来登录。SSL需要使用到HTTP中的CONNECT命令,执行CONNECT之后,浏览器和服务器就建立了一个TCP连接,可以发送任意数据了,而且是双向的,不是HTTP的那种request-response模型。

    这里就遇到难题了,因为我的数据需要经过国内的代理中转,而这个代理服务器又不支持CONNECT命令。如果我把CONNECT命令传到了国外的代理上去,那么之后建立连接后,TCP的数据传输必须建立在HTTP之上。把一个双向传输数据的连接建立在一个request-response的单向连接上,难度就大了。

    到国外搜了一下资料,也比较少,但有人提出了一些不错的方法,(可以参见原文:http://www.tla.ch/TLA/NEWS/2006sec/2006-11-06-tcp%20in-http.htm)。 和我以前做异步网页聊天的思路差不多。就是启用一个长连接来达到服务器响应客户端的要求。一般来说,至少需要开启两个HTTP连接。一个HTTP连接负责(使用POST)发送数据到服务器;同时开启另外一个连接,发送一个POST,然后服务器返回一个正文长度无限大的数据或者使用trunked模式,有数据需要发送到客户端的时候就传输过来。传输的数据均为TCP连接的数据。当然,这种做法效率肯定不怎么可观,但是当单次发送数据量比较大的时候,额外消耗时间占总需求时间的比例就少,影响不大,还是很值得一试!

    话又说回来,我只是想打一条TCP隧道,用于SSL传输登录信息而已,用得着那么麻烦吗?所以我目前还是没有把TCP over HTTP写出来,以上只是一些想法,有兴趣的同学可以去加入自己的思路去实践一下!

    我在1.0.3版本的客户端上,使用不经过国内的代理服务器,直接向FoxServer发送请求来建立隧道,效果还挺不错!因为我成功使用这个HTTP代理登录了QQ,也测试了能够登录Google账号了。

PS:两三天前放出了Fox2Client,到现在差不多30位朋友注册了账号了。遗憾的是,因为我测试是使用了个人博客的VPS提供服务,网络带宽有限,肯定支持不了那么多人同时使用。所以已经停止了发放邀请码,希望见谅!如果哪位朋友也有一个国外的VPS,可以试一下使用我的程序搭建一个网络分享平台。

TCP over HTTP, 可能否?》有6个想法

  1. momaer

    如果哪位朋友也有一个国外的VPS,可以试一下使用我的程序搭建一个网络分享平台。
    我是志愿者。

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据