因为一开始没有考虑到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,可以试一下使用我的程序搭建一个网络分享平台。
肉鸡搭建行不行
最好自己私人的吧。。。
如果哪位朋友也有一个国外的VPS,可以试一下使用我的程序搭建一个网络分享平台。
我是志愿者。
@momaer, 需要使用HomeServer和80端口!条件真苛刻。。。
使用 SSH 多方面啊,三种转发类型组合使用什么问题都解决了。
@黑孩儿,达不到我要求的速度呀,而且在教育网的话,未必能够连上vps