V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuzenan888
V2EX  ›  互联网

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

  •  
  •   yuzenan888 · 2018-02-24 16:06:23 +08:00 · 2672 次点击
    这是一个创建于 2492 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    例如一封普通信件,外面套个信封就是平邮,贴个邮票去邮局就能寄。外面再套个快递箱,发 sf 快递,对方当然也是可以收到的啊。 只是对方收到以后还需要拆一下快递盒子,再拆信封才能看到你的信件。
    WuwuGin
        6
    WuwuGin  
       2018-02-24 18:40:32 +08:00 via Android
    笼统地说只要对面认识你发送数据的格式,HTTPS 毕竟再怎么说也是应用层的东西,依然是 TCP 协议,所以只是换了个马甲而已。
    yuzenan888
        7
    yuzenan888  
    OP
       2018-02-24 21:15:10 +08:00
    @mind3x @noe132 @huangunic0rn @akira @WuwuGin
    谢谢各位的解答。那这样说的话,HTTP 代理服务器只要可以支持 CONNECT 命令,那么想代理什么都没问题了?
    还有,这样的话 SOCKS 代理还有什么存在的意义呢?
    wwqgtxx
        8
    wwqgtxx  
       2018-02-24 21:17:26 +08:00 via iPhone
    @yuzenan888 socks5 还支持 udp
    akira
        9
    akira  
       2018-02-24 23:30:22 +08:00
    @yuzenan888 协议更简洁
    WuwuGin
        10
    WuwuGin  
       2018-02-25 00:07:18 +08:00 via Android
    @yuzenan888 每个协议都是发明出来对应某种特定的应用场景的,就像为什么只用 GPU 挖矿一样,无非就是同等成本下效率最高的选择而已。HTTP 代理相当于在普通的传输上再封装一次,普通场景下没人会用的,就像没人会花相同的钱买 CPU 挖比特币一样。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2657 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:08 · PVG 23:08 · LAX 07:08 · JFK 10:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.