据我所知,SOCKS代理只在TCP级别建立连接,而HTTP代理在HTTP级别解释流量。因此,SOCKS代理可以用于任何类型的协议,而HTTP代理只能处理HTTP流量。但是为什么像Squid这样的HTTP代理可以支持IRC,FTP等协议?当我们使用HTTP代理进行IRC或FTP连接时,具体会发生什么?通过HTTP协议将包发送到代理时,是否有任何元数据添加到包中?
答案 0 :(得分:15)
HTTP代理能够支持HTTP以外的高级协议,如果它支持CONNECT方法,主要用于HTTPS连接,这里是来自Squid wiki的描述:
CONNECT方法是一种通过HTTP代理隧道传输任何类型连接的方法。默认情况下,代理建立到指定服务器的TCP连接,以HTTP 200(连接建立)响应进行响应,然后在客户端和服务器之间来回扫描数据包,而不理解或解释隧道流量
如果客户端软件支持通过“HTTP CONNECT”启用(HTTPS)代理进行连接,则它可以是任何可以使用此类代理(VPN,SSH,SQL,版本控制等)的高级协议。
答案 1 :(得分:6)
正如其他人所提到的,“HTTP CONNECT”方法允许您通过代理建立任何基于TCP的连接。此功能主要用于HTTPS连接,因为对于HTTPS连接,整个HTTP请求都是加密的(因此它在代理中显示为“无意义的”TCP连接)。换句话说,代理上的HTTPS会话或代理上的SSH / FTPS会话都将显示为代理的“加密会话”,并且它将无法区分它们,因此它必须要么允许他们全部或全部。
在正常操作期间,HTTP代理接收HTTP请求,并且“足够聪明”以理解能够使用它执行高级别操作的请求(例如,搜索其缓存以查看它是否可以在不进行响应的情况下提供响应到目标服务器,或咨询白名单/黑名单以查看是否允许此URL,等等。在“连接”模式下,这些都不会发生。代理建立到目标服务器的TCP连接,并简单地将所有流量从客户端转发到目标服务器以及从目标服务器到客户端的所有流量。这意味着任何TCP协议都可以工作(HTTPS,SSH,FTP - 甚至是普通的HTTP)