为什么HTTP代理能够支持像IRC和FTP这样的协议?

我知道一个SOCKS代理只在TCP层建立连接,而HTTP代理在HTTP层解释流量。 因此,SOCKS代理可以用于任何类型的协议,而HTTP代理只能处理HTTP流量。 但为什么像Squid这样的HTTP代理可以支持像IRC,FTP这样的协议? 当我们使用HTTP代理进行IRC或FTP连接时,具体发生了什么? 当通过HTTP协议发送给代理时,是否有任何元数据添加到软件包中?


如果HTTP代理支持CONNECT方法(主要用于HTTPS连接),则HTTP代理能够支持除HTTP之外的高级别协议,下面是Squid wiki的说明:

CONNECT方法是一种通过HTTP代理隧道传输任何类型的连接的方式。 默认情况下,代理与指定的服务器建立TCP连接,以HTTP 200(连接建立)响应进行响应,然后在客户端和服务器之间来回地掠过数据包,而无需了解或解释隧道流量

如果客户端软件通过启用HTTP CONNECT的(HTTPS)代理支持连接,则它可以是任何可以与这种代理(VPN,SSH,SQL,版本控制等)协同工作的高级协议。


正如其他人所提到的,“HTTP CONNECT”方法允许您通过代理建立任何基于TCP的连接。 此功能主要用于HTTPS连接,因为对于HTTPS连接,整个HTTP请求都是加密的(所以对于代理来说,它显示为“无意义的”TCP连接)。 换句话说,通过代理的HTTPS会话或通过代理的SSH / FTPS会话都将作为代理的“加密会话”出现,并且无法将它们分开,因此它必须让他们全部或全部不用。

在正常操作期间,HTTP代理接收到HTTP请求,并且“足够聪明”以理解请求能够使用它进行高级别事情(例如,搜索其缓存以查看它是否可以在不去目的地的情况下提供响应服务器,或咨询白名单/黑名单以查看该URL是否被允许等)。 在“连接”模式下,这些都不会发生。 代理建立到目标服务器的TCP连接,并简单地转发从客户端到目标服务器的所有流量以及从目标服务器到客户端的所有流量。 这意味着任何TCP协议都可以工作(HTTPS,SSH,FTP - 即使是普通的HTTP)

链接地址: http://www.djcxy.com/p/62641.html

上一篇: Why are HTTP proxies able to support protocols like IRC and FTP?

下一篇: Scala pattern matching with tuple: matching equal values in the tuple