为啥 HTTP/HTTPS 代理和 Socks 代理可以在一个端口上工作?

Posted

技术标签:

【中文标题】为啥 HTTP/HTTPS 代理和 Socks 代理可以在一个端口上工作?【英文标题】:Why can HTTP/HTTPS proxy and Socks proxy work on one single port?为什么 HTTP/HTTPS 代理和 Socks 代理可以在一个端口上工作? 【发布时间】:2021-10-16 22:20:19 【问题描述】:

许多代理软件通过一个端口提供多种协议。

1。 是否保留任何字节(在 TCP/UDP 包之上或之中)来标记客户端正在使用哪个协议?

据我所知,HTTP协议只是由TCP的数据段承载,没有其他任何标记。

那么代理软件如何在收到请求时告诉协议? (通过猜测接收到的第一个或两个字节?这听起来不是一个好主意)

2。 HTTP代理和HTTPS代理有什么区别?

这是我的猜测

“HTTP代理”只表示可以为HTTP协议提供代理的服务,而“HTTPS代理”可以为HTTPS协议提供服务? (唯一的区别就是他们是否可以处理 HTTP CONNECT 方法)所以 HTTPS 代理只是一个功能增强的 HTTP 代理

或者

HTTPS 代理在客户端和代理服务器之间提供额外的安全层? (为了保护 HTTP CONNECT 方法头?)所以 HTTP 代理和 HTTPS 之间的通信过程是完全不同的 代理,HTTP代理和HTTPS代理都可以服务HTTP/HTTPS协议?

【问题讨论】:

【参考方案1】:
    是否有保留任何字节(在 TCP/UDP 包之上或之中)来标记客户端正在使用哪个协议?

它不是单个字节,但 HTTP 请求与 SOCKS 请求有明显的区别,看看各自的标准(RFC 7230、RFC 1928)就会发现。并非所有协议都可以轻松区分,但对于 SOCKS 和 HTTP 来说确实如此。

    HTTP代理和HTTPS代理有什么区别?

HTTPS 代理是用于https:// 请求的 HTTP 代理。这是通过使用CONNECT method 创建一个通过代理到最终服务器的隧道,然后在此隧道内执行端到端 HTTPS (TLS+HTTP) 来完成的。

... 还是 HTTPS 代理在客户端和代理服务器之间提供额外的安全层?

这也存在,但通常称为“HTTP 代理 over TLS”、“HTTP 代理 over HTTPS”、“加密代理连接”或类似名称,而不是“HTTPS 代理”。

【讨论】:

以上是关于为啥 HTTP/HTTPS 代理和 Socks 代理可以在一个端口上工作?的主要内容,如果未能解决你的问题,请参考以下文章

当有 SOCKS 代理时,为啥我的脚本遵循 /etc/hosts 而浏览器不遵循?

为啥 Windows 上的 IE/Chrome 不支持端口 27977 上的 SOCKS5 代理? [关闭]

Shell 命令 curl 和 wget 使用代理采集网页的总结大全

转-linux下配置socks5代理

Git中设置代理和取消代理

为啥我使用了IP代理,但并没没改变IP