一个代理端口如何同时接受 HTTP 和 SOCKS
说明一个刻意混合的监听器如何区分 HTTP 与 SOCKS,而普通的单一协议监听器做不到这一点。
混合代理监听器可以在一个 TCP 端口上同时接受 HTTP 和 SOCKS,因为服务器会检查最初的协议字节。端口号本身并不执行这种识别。
HTTP 代理请求以 HTTP 方法开头,例如 GET 或 CONNECT。SOCKS 问候则以二进制协议字段开头。为这些输入设计的软件可以把连接分派给相应的处理器。
这是明确的实现特性。普通的 Squid HTTP 监听器不会因为端口被改成 1080 就变成混合监听,而只支持 SOCKS 的监听器也不会从浏览器设置中学到 HTTP。
TLS 又增加了一道边界:加密的代理连接以 TLS 开头,而不是可见的 HTTP 方法。要在同一端点上支持它,需要额外的刻意处理;能识别明文 HTTP 和 SOCKS 并不证明具备这种能力。
请使用该端点文档中写明的客户端协议。如果两者都能工作,那只是关于该服务器混合监听器的证据,而不是在所有客户端中不指定协议的理由。
Glider 的混合监听器提供了一个具体例子:它先窥探一个字节而不消耗它,把 0x05 交给 SOCKS5 处理器,否则就调用自己的 HTTP 解析器。该解析器仍会校验传入的请求;分派选择并不会让任意输入成为合法的 HTTP。
共享 TCP 监听器本身并不提供 SOCKS5 的 UDP 关联。Glider 会单独启动它的 UDP 监听器。TCP 协议选择与后续的数据报中继是两项独立的能力。