HTTP(S) 代理为什么还能代理部分 HTTP(S) 之外的协议?具体是什么原理?

2018-02-24 16:06:23 +08:00
 yuzenan888

前段时间搭建了一个 OpenVPN,发现其支持 HTTP 前向代理。

今天看到了一篇分析 HTTP 代理服务器的文章,发现其报文里面传送的是标准的 HTTP 头。

既然这样的话,为什么还能代理除了 HTTP(S) 之外的协议?

然后我又研究了下可否通过 HTTP 代理连接 SSH,也是可行的……

2580 次点击
所在节点    互联网
10 条回复
mind3x
2018-02-24 16:13:04 +08:00
noe132
2018-02-24 18:12:20 +08:00
因为 http(s)代理在完成 connect 部分后就相当于一条到指定主机端口 tcp 隧道。任何 tcp 流量理论上都可以通过此隧道转发。
noe132
2018-02-24 18:15:53 +08:00
http 代理通常是代替你请求资源。https 因为证书通常只能用 connect 做转发。
所以步骤是客户机发送 connect 请求连接到代理,代理收到请求后简历到指定服务器的端口的连接,并双向转发 tcp 数据包。
huangunic0rn
2018-02-24 18:22:30 +08:00
因为软件支持 CONNECT --
akira
2018-02-24 18:29:49 +08:00
只要发起方和代理方都有对应处理,你想代理什么协议都是可以的。协议只是约定了数据的格式,如果对数据做了二次封装,那以另外一种协议格式收发完全没问题啊。

例如一封普通信件,外面套个信封就是平邮,贴个邮票去邮局就能寄。外面再套个快递箱,发 sf 快递,对方当然也是可以收到的啊。 只是对方收到以后还需要拆一下快递盒子,再拆信封才能看到你的信件。
WuwuGin
2018-02-24 18:40:32 +08:00
笼统地说只要对面认识你发送数据的格式,HTTPS 毕竟再怎么说也是应用层的东西,依然是 TCP 协议,所以只是换了个马甲而已。
yuzenan888
2018-02-24 21:15:10 +08:00
@mind3x @noe132 @huangunic0rn @akira @WuwuGin
谢谢各位的解答。那这样说的话,HTTP 代理服务器只要可以支持 CONNECT 命令,那么想代理什么都没问题了?
还有,这样的话 SOCKS 代理还有什么存在的意义呢?
wwqgtxx
2018-02-24 21:17:26 +08:00
@yuzenan888 socks5 还支持 udp
akira
2018-02-24 23:30:22 +08:00
@yuzenan888 协议更简洁
WuwuGin
2018-02-25 00:07:18 +08:00
@yuzenan888 每个协议都是发明出来对应某种特定的应用场景的,就像为什么只用 GPU 挖矿一样,无非就是同等成本下效率最高的选择而已。HTTP 代理相当于在普通的传输上再封装一次,普通场景下没人会用的,就像没人会花相同的钱买 CPU 挖比特币一样。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/432261

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX