SOCKS5 和 HTTP 代理有什么区别?
HTTP 代理按 HTTP 协议转发请求,访问 HTTPS 网站时用 CONNECT 方法开一条 TCP 隧道(RFC 9110,2022 年 6 月);SOCKS5 不解析内容,只按目标地址和端口转发 TCP 连接,还能用 UDP ASSOCIATE 转发 UDP(RFC 1928,1996 年 3 月)。两种协议本身都不加密,SOCKS5 的用户名和密码按明文发送(RFC 1929)。VLESS、Trojan、Shadowsocks、AnyTLS、Hysteria2 是客户端和远端节点之间的协议,管的是另一段路。
本文目录8 节
一次访问要先后经过两种协议
用客户端连机场节点上网时,一个请求要先后经过两种代理协议。浏览器先把请求交给本机客户端开的端口,这一段用的是 HTTP 代理协议或 SOCKS5。客户端再把数据装进 VLESS、Trojan、Shadowsocks 这类节点协议,经公网送到远端服务器。前一段只在你自己的电脑里转一圈,后一段才出门。
所以“SOCKS5 和 VLESS 哪个好”这类问题没法直接比,它们各管一段路。下面先讲本机这一段的两种协议,再把常见的节点协议放进一张表。想先补一补代理服务器的基础,可以读 代理服务器入门。
本机这一段不一定要二选一。以 mihomo 为例,它的文档里,HTTP 代理端口和 SOCKS 端口各有一个字段,另外还有一个混合端口,文档说它是一个特殊的端口,同时支持 HTTP(S) 和 SOCKS5[1]。程序连上混合端口,说哪种协议由程序自己决定。
还有一种场景,是向服务商买“SOCKS5 代理 IP”或“HTTP 代理 IP”。这时 HTTP 或 SOCKS5 这一段要经过公网,连到服务商的服务器,后文说的“协议本身不加密”就会真正落到你头上。这类业务 IP 和机场节点有什么不同,见 代理 IP 是什么。
HTTP 代理按网址办事
HTTP 代理听得懂 HTTP。访问 http:// 开头的网址时,程序把完整网址写进请求行发给代理,RFC 9112 把这种写法叫 absolute-form[2],例子是下面这一行。
text
GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1代理读到这一行,替你去取页面,再把结果交回来。整个过程里,网址、请求头和页面内容,代理都看得一清二楚。
现在的网站大多是 https://,程序这时换用 CONNECT 方法,请求行里只写目标主机和端口,例如 CONNECT server.example.com:443 HTTP/1.1。RFC 9110 第 9.3.6 节规定,收到 CONNECT 的一方去和目标服务器建立隧道,建好以后只在两个方向上原样搬运数据,一直到隧道关闭[3]。浏览器和网站的 TLS 握手在隧道里完成,代理知道你要连哪台主机、哪个端口,页面内容它看不到。同一节还建议,支持 CONNECT 的代理只对一组已知端口放行[3]。
代理要求登录时,会回一个 407,意思是需要代理认证,程序随后在请求头 Proxy-Authorization 里带上凭据再发一次[3]。认证信息跟着请求头走,普通 HTTP 代理和程序之间的连接不加密,路上能截到流量的人也就能读到它。
CONNECT 隧道里跑的是 TCP。RFC 9298 在摘要里拿它作参照,说自己定义的 UDP 代理办法和 CONNECT 代理 TCP 的方式相似[4]。这份 2022 年 8 月发布的扩展在 HTTP/1.1 下靠 Upgrade 头,在 HTTP/2 和 HTTP/3 下靠扩展 CONNECT。本站核对时没有找到常见代理客户端在本地 HTTP 端口上支持它的说明,下面的对照表仍按只走 TCP 来写。
SOCKS5 只管连到哪里
SOCKS5 的规范是 1996 年 3 月发布的 RFC 1928[5]。它不解析应用层的内容,程序只需告诉它要连哪个地址的哪个端口。
它前面还有 SOCKS4 和 SOCKS4a 两个版本。mihomo 的 SOCKS 端口三个版本都接受[1],curl 文档对两个老版本的区分在域名上,SOCKS4 由 curl 自己解析,SOCKS4a 交给代理解析[6]。现在配置客户端,写 SOCKS5 就够了。
握手分两步。程序先列出自己支持的认证方式,服务器从里面挑一种,0x00 表示不需要认证,0x01 是 GSSAPI,0x02 是用户名密码,回 0xFF 表示一种都不接受,程序必须断开连接[5]。认证过了,程序再发请求。命令一共三种,最常用的是 CONNECT,用来建立 TCP 连接;BIND 让服务器等对方连进来;UDP ASSOCIATE 负责 UDP[5]。目标地址可以写 IPv4、IPv6,也可以直接写域名。RFC 还提到,SOCKS 服务惯例上监听 TCP 1080 端口[5]。
UDP 的转发方式有点绕。程序先用 TCP 发出 UDP ASSOCIATE 请求,服务器回一个中继地址,之后每个 UDP 报文前面加一段小头,写明目的地址和端口,发到这个中继上。中继只收登记过的来源地址发来的报文,转发不了就静默丢掉,那条 TCP 连接一断,这层关联随之结束[5]。语音通话、视频会议和 DNS 查询都会用到 UDP,这是 SOCKS5 比 HTTP 代理多出来的本事。
域名交给谁解析
用 SOCKS5 最容易踩的坑在域名解析。程序把域名原样交给代理,解析就在代理那头完成;要是先在本机解析成 IP 再交出去,本机所在网络的 DNS 就会看到你要访问的域名,解析结果也由本地网络说了算。curl 把这两种做法分成两种写法,socks5:// 由 curl 在本地解析,socks5h:// 把主机名交给代理[6]。
文档里配的例子就是下面两行,只差一个字母。
终端
curl -x socks5://proxy.example.com http://www.example.com/
curl -x socks5h://proxy.example.com http://www.example.com/认证和加密
用户名密码认证另有一份 RFC 1929。用户名和密码各占 1~255 个字节,以明文发送,RFC 自己在安全部分写了,容易被嗅探的网络里不建议用这种方式[7]。RFC 1928 把安全性交给所选的认证和封装方法[5],日常用的“不认证”和“用户名密码”两种,都不对数据加密。
两种代理放在一张表里
| 对比项 | HTTP 代理 | SOCKS5 |
|---|---|---|
| 规范 | RFC 9110、RFC 9112(2022-06) | RFC 1928(1996-03),认证见 RFC 1929 |
| 代理能看懂什么 | 完整的 HTTP 请求;访问 HTTPS 时只看到主机名和端口 | 只看目标地址和端口 |
| 能转发的流量 | HTTP 请求,以及 CONNECT 隧道里的 TCP | TCP(CONNECT)和 UDP(UDP ASSOCIATE) |
| 域名由谁解析 | 代理,请求里带着主机名 | 程序发域名时由代理解析,发 IP 时由本机解析 |
| 认证方式 | 407 质询,请求头带 Proxy-Authorization | 先协商方法,用户名密码以明文发送 |
| 协议本身加密吗 | 不加密 | 常用的两种方法都不加密 |
| 惯用端口 | 规范未指定 | TCP 1080 |
| 常见用法 | 浏览器、系统代理、只发网页请求的工具 | 命令行工具、要发 UDP 或说其他协议的程序 |
速度上两者差别不大,转发数据时都是原样搬运,快慢主要取决于后面节点那一段线路。本机这一段走的是 127.0.0.1 回环地址,数据不出电脑,加不加密影响也不大。
节点协议管的是另一段
客户端把本机收到的 HTTP 或 SOCKS5 请求,换成节点协议发给远端服务器。这一段要走公网,加密和伪装都靠它。下表只摘各项目文档里写明的内容,不涉及服务器怎么搭。
| 协议 | 怎么承载 | 加密由谁负责 | 文档里的时间要求 | 文档要点 |
|---|---|---|---|---|
| VLESS | 文档要求配合 TLS、REALITY 等传输安全层 | 交给外层的 TLS 或 REALITY,也能开 VLESS 自己的可选加密 | 写明不依赖系统时间 | 无状态的轻量传输协议,用 UUID 认证[8] |
| VMess | 由传输配置决定 | 协议自带加密 | UTC 误差要在 120 秒以内 | 文档称它为加密传输协议[9] |
| Trojan | TLS | TLS | 文档未写 | 密码以 SHA224 的十六进制发送;格式不对的请求转给预设端点,默认是本机 80 端口的 HTTP 服务;支持 UDP[10] |
| Shadowsocks | TCP 与 UDP | 协议自带 AEAD 加密 | 2022 版时间差超过 30 秒按重放处理 | 旧的流加密已被项目方判定为不安全;2022 版改用固定长度的随机密钥[11][12][13] |
| AnyTLS | TLS,sing-box 里是必填项 | TLS | 文档未写 | 用来缓解“TLS 套 TLS”的握手特征,带分包填充和连接复用[14][15] |
| Hysteria2 | 定制的 QUIC,走 UDP | QUIC 自带加密 | 文档未写 | 主页说它伪装成标准 HTTP/3 流量[16][17] |
表里写“文档未写”,只说明我们读到的那几页没有提,用到 TLS 的协议仍然要靠时钟大致准确才能通过证书校验。时间不准引起的整批超时怎么排查,见 代理节点超时排查。
Shadowsocks 那一行要多说一句。项目文档直接写了旧的流加密方式已经被攻破,新用户必须用 AEAD[12]。还在用老配置的话,先确认加密方式是 AEAD 或 2022 版的那几种。
一份订阅里往往不止一种协议
拿一份真实订阅看比例。本站 2026-06-27 检测 星岛梦(StarDream) 的订阅时,70 个节点里 VLESS 60 个、AnyTLS 10 个。客户端内核得同时认识这两种协议,这份订阅才能全部用上。AnyTLS 出现得比较晚,内核版本旧一点,那 10 个节点就用不上,几个常见内核从哪个版本起支持它,写在前面提到的超时排查一文里。
实际该怎么选
程序只支持其中一种,就用那一种。浏览器一般跟随系统代理设置,填客户端的 HTTP 端口或混合端口就能用。
两种都支持的时候,大多数情况下选哪个都行。程序要发 UDP,选 SOCKS5。邮件客户端、SSH 这类不说 HTTP 的程序,走 SOCKS5 更直接。想让代理那头去解析域名,同样用 SOCKS5,在 curl 一类工具里记得写成 socks5h。
程序本身没有代理设置,两种协议都用不上,就要靠客户端的 TUN 模式接管,怎么开在 代理模式怎么切换 里有。客户端开在哪个端口、本地地址该写什么,另有一篇 地址和端口怎么填。
节点协议一般轮不到用户来选,服务商给什么就用什么,你要做的是确认客户端支持它。各个客户端支持哪些协议,对照表在 代理软件对照。国内对这类工具有哪些规定,原文条款整理在 上外网相关法规,本页不做法律判断。
常见问题
浏览器里应该填 HTTP 代理还是 SOCKS5?
两种都能用,只浏览网页时差别很小。浏览器跟随系统代理时,填客户端的 HTTP 端口或混合端口最省事。想让代理那头解析域名,或者程序要发 UDP,再改用 SOCKS5。
走了 SOCKS5,我和网站之间的数据就加密了吗?
SOCKS5 协议本身不加密,常用的不认证和用户名密码两种方式都只负责转发。数据有没有加密,要看网站本身是不是 HTTPS,以及客户端到远端节点那一段用的是什么节点协议。
curl 里写 socks5:// 和 socks5h:// 有什么不同?
不同在域名由谁解析。socks5:// 由 curl 先在本机把域名解析成 IP,再交给代理;socks5h:// 把主机名原样交给代理,由代理那头解析。不想让本地网络的 DNS 看到你访问的域名,用后一种。
服务商卖的 SOCKS5 代理 IP,和客户端里的 SOCKS5 端口是一回事吗?
协议相同,位置不同。你电脑上的客户端开着 SOCKS5 端口,数据进来以后再由节点协议加密送往远端。服务商卖的 SOCKS5 代理 IP 在他们的服务器上,程序要经公网直接连过去,用户名和密码按明文传输。两者面向的用途也不一样。
同一份订阅里既有 VLESS 又有 Trojan,该优先用哪种?
两者都靠 TLS 一类的传输安全层保护数据,日常使用的差别主要在客户端支持和服务商的线路安排。按测速和解锁结果挑具体节点,比按协议名挑更靠谱。
为什么在公司网络里 Hysteria2 节点连不上,别的节点却正常?
Hysteria2 基于 QUIC,数据走 UDP。有的网络会限制或丢弃 UDP 流量,走 TCP 的 VLESS、Trojan 节点不受影响。换到不限制 UDP 的网络,或者改用走 TCP 的节点即可。
SOCKS5 有没有固定的端口号?
RFC 1928 说 SOCKS 服务按惯例监听 TCP 1080,这只是惯例,没有强制。本机代理客户端开在哪个端口,由软件自己的设置决定,以设置页显示的为准。
资料来源与更新记录
- mihomo 文档 · 端口(HTTP、SOCKS 与混合端口) MetaCubeX · 2026-10-20
- RFC 9112 HTTP/1.1(2022-06) IETF · 2026-10-20
- RFC 9110 HTTP Semantics(2022-06) IETF · 2026-10-20
- RFC 9298 Proxying UDP in HTTP(2022-08) IETF · 2026-10-20
- RFC 1928 SOCKS Protocol Version 5(1996-03) IETF · 2026-10-20
- Everything curl · SOCKS proxy curl 项目 · 2026-10-20
- RFC 1929 Username/Password Authentication for SOCKS V5(1996-03) IETF · 2026-10-20
- Xray 文档 · VLESS 出站 Project X · 2026-10-20
- Xray 文档 · VMess 出站 Project X · 2026-10-20
- The Trojan Protocol trojan-gfw · 2026-10-20
- Shadowsocks · AEAD ciphers Shadowsocks · 2026-10-20
- Shadowsocks · Stream ciphers Shadowsocks · 2026-10-20
- Shadowsocks SIP022 AEAD-2022 Ciphers Shadowsocks · 2026-10-20
- anytls-go 项目说明 anytls · 2026-10-20
- sing-box 文档 · AnyTLS 出站 SagerNet · 2026-10-20
- Hysteria 2 项目主页 Hysteria · 2026-10-20
- RFC 9000 QUIC A UDP-Based Multiplexed and Secure Transport(2021-05) IETF · 2026-10-20
- DL 首次发布