HTTP代理与SOCKS5:协议层面的区别及按任务选型
同一个代理服务器经常会以两种模式提供给客户端:作为HTTP代理和作为SOCKS5。很多人以为这只是营销噱头,其实不然。这两个字母背后隐藏着两种本质不同的中介协议,运行在网络协议栈的不同层级上。理解它们之间的差异,能帮你省下数小时的调试时间、降低延迟,并针对具体工程任务选对工具。
本指南将从握手的第一个字节一直讲到最后一个请求头,深入剖析这两种协议的运作机制。我们会看到中介在每种模式下究竟能看到什么、为什么SOCKS5刻意不解析流量内容,以及CONNECT方法如何把一个普通HTTP代理变成透明的TCP隧道。文末有任务-协议对照表和详细FAQ。全文保持工程风格:少些花哨,多些代码和精确表述。
引言:为什么同一个代理要以两种模式提供
想象一个邮局。在第一种模式下,工作人员会读信封上的地址,可能把信换到另一个信封里、盖个章,有时还会告诉你这种信昨天已经来过、并从档案里取出副本给你。这就是HTTP代理:它理解请求所用的语言,并把内容当作有意义的数据来处理。
在第二种模式下,同一个员工收到的是一个密封的集装箱和一条指令:送到某某地址的某某端口,里面装的是什么——不关他的事。他只是从发送方到接收方架起一根管道,双向搬运字节。这就是SOCKS5:一种会话层协议,对隧道内容毫不在意。
为什么服务商(比如Proxeon)会在同一套基础设施上提供两种模式?因为客户的任务各不相同。有人需要HTTP层面的缓存和过滤,有人需要透明传输任意TCP协议。一台服务器可以监听不同端口,同时服务两种场景。这是技术方案,不是文字游戏。
从一开始就要记住的核心要点:HTTP代理工作在应用层(L7),而SOCKS5更接近会话层(大致为L5)。其余所有区别都由此衍生:代理能看见什么、能修改什么、支持哪些协议、带来多少额外开销。
基础:两种中介层级
在深入之前,先明确基本概念。代理是客户端与目标服务器之间的中介。客户端不直接发送请求,而是发给代理,由代理转发出去。不同类型代理的区别在于,它们在哪个层级上理解所传送的内容。
应用层 vs 会话层
HTTP代理会完整解析HTTP消息。它能看见方法(GET、POST)、路径、所有请求头,在未加密的情况下还能看见正文。这使它既聪明又受限:它只能处理自己能理解的协议。
SOCKS5则完全不解析应用层协议。它从客户端收到一条命令,比如与主机X的端口Y建立TCP连接,然后就只是搬运字节。正是这种中立性让SOCKS5成为任意TCP协议的通用传输通道:HTTP、HTTPS、SMTP、IMAP,以及你自己软件里的许多私有协议。
“代理看到内容”意味着什么
当我们说HTTP代理能看到内容时,指的是未加密的HTTP。如果流量是通过CONNECT方法走的HTTPS(下面会详细讲),即便是HTTP代理也只能看到加密流和主机名。这一点很重要:现代Web几乎全是TLS,所以HTTP代理的实际可见深度在建立隧道那一刻就止步了。
端口与寻址方案
在客户端,区别体现在你如何配置代理。HTTP代理的方案形如http://user:pass@host:port,SOCKS5则是socks5://user:pass@host:port。两种模式的端口通常不同,因为监听的是不同的处理器。同一台Proxeon物理服务器可以在一个端口提供HTTP代理,在另一个端口提供SOCKS5。
HTTP代理:带绝对URI的请求
从经典HTTP代理及其最显著的特征——请求行中的绝对URI——开始。
请求的绝对形式
当浏览器直接访问网站时,发送的是相对路径。请求行看起来是这样:
GET /index.html HTTP/1.1
Host: example.com但当同一个浏览器配置了HTTP代理时,它会向代理服务器发送绝对形式的URI。代理必须知道该把请求转发到哪,所以完整地址会出现在第一行:
GET http://example.com/index.html HTTP/1.1
Host: example.com
Proxy-Connection: keep-alive这是根本区别。代理读取http://example.com/index.html,提取主机,与目标服务器建立连接,然后以普通的相对形式转发请求。RFC 7230标准明确规定,客户端在向代理发请求时应使用absolute-form,在直接访问时应使用origin-form。
代理能看到和修改什么
在未加密的HTTP模式下,代理能看到很多东西。列举如下:
- 完整URL,包括路径和查询参数。
- 所有请求头:User-Agent、Accept、Cookie、Referer。
- 请求正文(POST或PUT时)。
- 服务器响应的完整内容:状态、头部、正文。
更重要的是,代理可以合法且有益地修改流量。企业或服务型HTTP代理的常见操作:
- 添加服务性请求头,如
X-Forwarded-For或Via。 - 删除不应继续传递的逐跳请求头(
Connection、Proxy-Authorization)。 - 为重复请求缓存响应。
- 在明确配置下进行压缩或内容转换。
代理专属请求头
有些请求头只在客户端与代理的对话中有意义,不应泄漏给目标服务器。最主要的是Proxy-Authorization,携带访问代理本身的凭据。别把它和面向目标服务器的Authorization混淆。还有一对状态码:407 Proxy Authentication Required表示代理要求认证,与目标服务器返回的401不同。
实战示例:用curl走显式HTTP代理
看看如何用curl访问Proxeon的HTTP代理。-x指定代理,-v显示对话过程:
curl -v -x http://user:pass@proxy.proxeon.net:8080 http://example.com/你会在输出中看到绝对形式的请求行和带有Base64编码凭据的Proxy-Authorization头。这清楚表明curl是在与代理通信,而不是直接访问目标服务器。
局限:仅限HTTP语义
经典HTTP代理最初形式只能转发HTTP请求。它不知道如何处理任意的SMTP TCP流或你应用的二进制协议。对于未加密HTTP这完全够用。但一旦出现HTTPS或其他协议,就需要隧道机制。这时CONNECT方法登场了。
CONNECT方法:HTTP代理作为TCP隧道
CONNECT方法让HTTP代理能够服务HTTPS乃至任意TCP流。它把聪明的应用层中介变成一根透明管道。逐步拆解其机制。
为什么需要CONNECT
HTTPS加密整条消息,包括头部和路径。如果代理试图读取绝对URI,只会撞上加密字节。TLS握手必须直接在客户端与目标服务器之间进行,否则端到端加密就丧失了。所以代理不需要读取,只需连接两点然后让开。
CONNECT请求长什么样
客户端向代理发送一个特殊请求,用authority-form取代URL,指定主机-端口对:
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dХNlcjpwYXNz代理与example.com:443建立TCP连接,若一切顺利,回复:
HTTP/1.1 200 Connection Established此后发生一件关键的事:代理不再是HTTP解析器,而变成双向字节中继器。客户端后续发送的一切都拷往服务器方向,反之亦然。浏览器就是在这一隧道之上直接对目标服务器发起TLS握手。
隧道建立后中介能看到什么
这是隐私与安全的关键问题。在200 Connection Established之后,HTTP代理能看到:
- 来自CONNECT命令本身的主机名和端口——隧道建立之前。
- 加密字节流——仅此而已。
- TLS ClientHello中的SNI(服务器名称指示),如果未启用SNI加密——技术上这也泄露主机名。
- 连接元数据:传输数据量、时长、时序。
隧道之后代理看不到的:URL路径、查询参数、头部、cookie、请求与响应正文。这些都被TLS保护。因此,对HTTPS流量而言,HTTP代理在CONNECT模式下几乎与SOCKS5无异:它只是传输通道。区别仅在于客户端如何协商隧道。
实战:CONNECT在行动
通过HTTP代理发出HTTPS请求时,curl会自动使用CONNECT。观察对话:
curl -v -x http://user:pass@proxy.proxeon.net:8080 https://example.com/在verbose输出中你会先看到CONNECT example.com:443 HTTP/1.1,接着是200 Connection Established,然后是TLS握手行,以及隧道内加密传输的GET请求。代理全程只看到前半部分。
CONNECT不限于443端口
虽然CONNECT最常指向443端口,规范并未将其绑定到HTTPS。技术上可以通过CONNECT隧道任意TCP协议到任意端口,前提是代理允许。实践中管理员常出于安全考虑限制允许的端口,通常只留443,偶尔也开22等。因此尝试通过CONNECT传SMTP可能撞上代理策略。
SOCKS5:握手、认证与ATYP
接下来说说RFC 1928定义的SOCKS5。这是一种哲学上完全不同的协议。它不知道、也不想管你传的是什么。它的任务是建立连接并成为管道。
握手的整体逻辑
SOCKS5对话是二进制而非像HTTP那样的文本。由几次简短的消息交换组成。大致如下:
- 客户端发送支持的身份验证方法列表。
- 服务器选择一种方法并告知。
- 如有需要,进行认证。
- 客户端发送连接请求:命令、地址类型、地址、端口。
- 服务器回复结果。
- 开始透明数据传输。
问候与方法选择
客户端的第一条消息非常紧凑:包含版本号(0x05)、提供的方法数量和具体方法。最常用的两种:0x00——无认证,0x02——用户名密码认证(RFC 1929)。服务器回复两个字节:版本和所选方法。若返回0xFF,说明所提供的方法都不合适,连接关闭。
用户名密码认证
若选择0x02,客户端发送单独消息,含子协议版本、用户名长度和值,然后是密码长度和值。服务器回复状态。重要的工程细节:经典SOCKS5中这些数据没有内建加密,所以只应在安全信道或可控环境中信任此类代理。对于Proxeon这类服务型代理,认证可能辅以IP绑定,降低凭据泄露风险。
命令:CONNECT、BIND和UDP ASSOCIATE
SOCKS5支持三条命令。最常见的是CONNECT(0x01),建立出站TCP连接。还有BIND(0x02)用于像老式FTP那样的入站连接。以及UDP ASSOCIATE(0x03)用于代理UDP数据报。UDP ASSOCIATE的机制及socks5与socks5h方案的差异我们此处刻意不展开——那是独立的大主题,有专门文章。这里集中讲与HTTP代理对比最本质的部分:ATYP字段。
ATYP:域名 vs IP,以及为什么这对解析至关重要
SOCKS5连接请求中有ATYP(地址类型)字段,决定如何解释紧随其后的地址。有三种取值:
0x01——IPv4地址,四字节。0x03——域名,首字节为长度,后接字符串。0x04——IPv6地址,十六字节。
这里藏着最重要的实践差异之一。当客户端发送域名(ATYP 0x03)时,DNS解析由代理服务器完成,而非客户端。当客户端发送已解析的IP地址时,解析在客户端一侧完成。差别影响使用谁的DNS、目标服务器最终看到哪个IP、以及地理相关路由是否准确。
对工程师而言这意味着:如果你需要名称在代理网络中解析,应传域名而非IP。许多库默认先在本地解析名称再走代理——这会改变行为。本地与远程解析差异及socks5与socks5h方案的详细对比见专门文章,这里只确认ATYP字段作为关键控制杠杆的存在。
实战:通过curl走SOCKS5
在curl中访问SOCKS5代理与HTTP版对称,只是换方案:
curl -v --socks5 user:pass@proxy.proxeon.net:1080 https://example.com/此时curl不会发送任何文本CONNECT行——而是进行二进制SOCKS5握手,然后在建立的隧道上传输TLS流量。对应用而言差别几乎不可见,但协议层面完全是另一场对话。
为什么SOCKS5不解析内容——而这正是它的力量
SOCKS5的哲学是极简。它不试图理解里面是HTTP、SMTP还是你自己的协议。这使它:
- 通用:任意TCP协议无需特殊支持。
- 轻量:握手简短,没有应用层解析。
- 透明:代理不干预数据,不修改、不缓存。
同一枚硬币的反面:SOCKS5无法缓存、按URL过滤或添加头部——因为它根本看不到这些。通用性以放弃应用层智能为代价。
按维度对比:实践中什么重要
把差异整理成结构化对比,聚焦真正影响工程选型的参数。
对非HTTP协议的支持
SOCKS5可承载任意TCP协议:邮件IMAP和SMTP、数据库、游戏协议、你自己的二进制交换。经典HTTP代理原生只懂HTTP。通过CONNECT可以隧道其他TCP协议,但前提是代理允许相应端口。实践中常限于443。结论:任意协议优选SOCKS5。
UDP
HTTP代理根本不支持UDP——其模型围绕TCP请求构建。SOCKS5有UDP ASSOCIATE命令,能代理数据报。这里不细讲其机制,但事实很重要:若任务需要UDP,HTTP代理直接出局。
额外开销
SOCKS5握手是几条短二进制消息。对新建连接极其便宜。HTTP代理在CONNECT模式下要先花一个额外往返完成CONNECT请求与200响应,之后才开始TLS。在大量短连接场景下,延迟差会累积。反之,在持久keep-alive和连接复用下,差异被抹平。对HTTP流量,HTTP代理可能凭缓存和连接池胜出。
缓存
这方面HTTP代理无与伦比。因为懂HTTP语义,它能缓存响应、遵守Cache-Control和ETag、返回304 Not Modified。对重复访问静态资源,这显著降低流量和延迟。SOCKS5物理上无法缓存——它看不见里面是什么。若任务是加速对重复资源的大批HTTP请求,带缓存的HTTP代理带来真实收益。
日志与可观测性
HTTP代理能记详细access-log:方法、URL、响应码、大小、User-Agent。对未加密HTTP的审计、调试和分析很有价值。HTTPS经CONNECT后细节降到主机-端口-流量级别。SOCKS5只记连接元数据:目标地址、时间、流量。若需HTTP应用级可观测性,选HTTP代理;若元数据足够,SOCKS5也够。
流量修改
HTTP代理可合法增删头部,对服务性目的有用。SOCKS5完全不碰数据。对不允许干预的场景,SOCKS5的透明性是优势。
差异汇总表
- 模型层级:HTTP代理——应用层L7;SOCKS5——会话层L5。
- 对话格式:HTTP——文本;SOCKS5——二进制。
- 非HTTP协议:HTTP——仅通过CONNECT且有局限;SOCKS5——原生支持。
- UDP:HTTP——不支持;SOCKS5——支持。
- 缓存:HTTP——支持;SOCKS5——不支持。
- 应用级日志:HTTP——未加密时支持;SOCKS5——仅元数据。
- 头部修改:HTTP——支持;SOCKS5——不支持。
- 连接开销:HTTP CONNECT——额外一个往返;SOCKS5——极小。
按任务选型:实用框架
理论只有变成决策才有价值。以下是选型框架和主对照表。先问自己三个问题。
选择前的三个问题
- 我要传什么协议?只有HTTP和HTTPS——两者都行,但HTTP代理有缓存和日志加成。任意TCP或UDP——只能SOCKS5。
- 需要应用级可观测性或缓存吗?需要——HTTP代理。需要纯净透明管道——SOCKS5。
- DNS解析应在哪一侧进行?若必须在代理侧解析,注意ATYP行为和客户端设置。
主对照表:任务-协议-原因
- 浏览器常规上网——HTTP代理或SOCKS5——都能用;HTTP代理加缓存且兼容企业策略,SOCKS5对非标准端口更简单。
- API集成的HTTP客户端——HTTP代理——原生支持,环境变量易配置,日志详尽便于调试。
- HTTPS大批量采集——SOCKS5或HTTP代理——HTTPS下都只是通道;短连接SOCKS5省往返,HTTP代理连接池更顺手。
- 邮件客户端(SMTP、IMAP、POP3)——SOCKS5——邮件协议非HTTP;HTTP代理经CONNECT常被端口封锁。
- 自研二进制TCP协议软件——SOCKS5——任意TCP的通用通道,无需特殊支持。
- 需要UDP的应用——SOCKS5——经UDP ASSOCIATE的唯一选择;HTTP代理不支持UDP。
- 加速重复静态资源访问——带缓存的HTTP代理——能返回缓存响应省流量。
- HTTP请求审计与详细日志——HTTP代理——未加密HTTP下能看见方法、URL和响应码。
- 一个应用同时处理多种协议——SOCKS5——一个通道覆盖所有TCP交换。
选型清单
- 确定应用协议:HTTP、其他TCP还是UDP。
- 决定是否需要缓存和应用日志。
- 检查客户端是否支持所需代理方案。
- 若打算隧道非443端口,向服务商确认CONNECT开放的端口。
- 考虑DNS解析应在哪一侧进行。
- 安排认证方式:用户名密码还是IP绑定。
主流客户端与库的兼容性
不理解具体工具如何配置,选协议就没意义。逐一看典型工具。
curl
curl支持两种协议。HTTP代理用-x http://...,SOCKS5用--socks5或-x socks5://...。还有在SOCKS5代理侧远程解析名称的变体,通过单独方案指定,详见专门材料。示例:
curl -x socks5://user:pass@proxy.proxeon.net:1080 https://api.example.com/v1/status环境变量
许多CLI工具和库遵循http_proxy、https_proxy和all_proxy变量。后者常接受SOCKS5方案。无需改代码即可全局配置:
export https_proxy=http://user:pass@proxy.proxeon.net:8080
export all_proxy=socks5://user:pass@proxy.proxeon.net:1080Python:requests与httpx
requests库通过proxies字典配置。SOCKS5需要额外的SOCKS支持包:
import requests
proxies = {"http": "http://user:pass@proxy.proxeon.net:8080", "https": "http://user:pass@proxy.proxeon.net:8080"}
r = requests.get("https://example.com/", proxies=proxies, timeout=10)
print(r.status_code)SOCKS5方案换成socks5,远程解析用单独方案。httpx类似,支持异步请求,适合批量操作。
Node.js
Node生态通过专用agent配置代理。HTTP代理用https-proxy-agent,SOCKS用socks-proxy-agent。示意:
const { SocksProxyAgent } = require('socks-proxy-agent');
const agent = new SocksProxyAgent('socks5://user:pass@proxy.proxeon.net:1080');
fetch('https://example.com/', { agent }).then(r => console.log(r.status));浏览器
浏览器通过系统设置或PAC文件支持两种。Chromium系可带启动参数指定代理服务器,Firefox有自己的设置,包括使用SOCKS时代理DNS的选项。正是浏览器中最常出现谁解析名称的问题——详见关于SOCKS方案的专门文章。
邮件客户端
经典邮件客户端通常支持SOCKS5作为SMTP和IMAP的通道。HTTP代理用于邮件很少见且仅经CONNECT,常受端口限制。实践结论:邮件默认考虑SOCKS5。
自研软件
若自己写应用,SOCKS5通过传输库或socket包装实现。应用内HTTP客户端更简单的是依赖HTTP库内建的HTTP代理支持。关键建议:别手写SOCKS握手解析,用成熟库——二进制协议在边界情况易出错。
常见误解
围绕这个话题积累了不少迷思。列表破除,免得你在错误前提出发浪费时间。
- “SOCKS5总比HTTP代理快”。不一定。短连接SOCKS5省往返,但带缓存和连接池的HTTP代理在重复HTTP请求上可能反超。
- “SOCKS5加密流量”。不。SOCKS5不加加密。隐私靠隧道内的TLS,而非SOCKS5本身。经典SOCKS5的凭据甚至没有内建加密。
- “HTTP代理能看到一切,包括HTTPS”。不。HTTPS经CONNECT时代理只看主机名、端口和流量。内容受TLS保护。
- “HTTP代理和SOCKS5只是不同端口的同一东西”。不。是不同协议。服务器地址相同不代表它们等同。
- “SOCKS5不支持认证”。支持——RFC 1929的用户名密码方法,也可IP绑定。
- “HTTP代理不能处理非HTTP协议”。可经CONNECT,但前提是代理允许所需端口。
- “浏览器配了SOCKS5,DNS总由代理解析”。不一定。取决于客户端设置和ATYP字段传的是域名还是已解析的IP。
- “CONNECT只对443有效”。技术上不是,但管理员常用策略限制端口。
- “SOCKS5能缓存”。不。它看不见内容,物理上无法缓存。
工具与资源
要熟练使用两种协议,手边备一套诊断和验证工具很有用。
连接诊断
- 带-v的curl——观察真实对话的最佳方式:CONNECT行、代理响应、TLS握手。
- 流量分析器——在包级别展示SOCKS5二进制握手与文本HTTP对话的区别。
- 端口开放检测工具——帮你了解代理上哪些端口可用于CONNECT。
库
- Python——requests和httpx加SOCKS支持扩展。
- Node.js——https-proxy-agent和socks-proxy-agent。
- 系统集成——环境变量http_proxy、https_proxy、all_proxy。
连接Proxeon时要检查什么
- 正确方案:HTTP代理用http,SOCKS5用socks5。
- 每种模式的正确端口——它们不同。
- 认证方式:用户名密码还是IP绑定。
- 若打算隧道非443端口,确认CONNECT允许的端口列表。
- DNS行为:你想在哪一侧解析名称。
迷你调试框架
- 先不带代理重放请求——确认目标可达。
- 带代理和-v重放——研究对话。
- 若HTTPS建不起来——检查CONNECT端口是否允许。
- 若名称不解析——检查传向代理的是域名还是IP。
- 若407——检查凭据和Proxy-Authorization头。
案例与应用结果
看几个典型工程场景,以及协议选择如何影响结果。数字是示意性的,用于说明依赖关系,非广告承诺。
案例1:与外部服务的API集成
团队通过Proxeon代理集成后端与外部REST API以控制出站地址。起初选SOCKS5,但发现标准HTTP库通过环境变量配置HTTP代理更简单。转用HTTP代理简化了配置,未加密服务调用上的详细access-log帮助快速定位合作方5xx错误。结论:纯HTTP API更适合HTTP代理。
案例2:邮件网关
服务通过固定出站地址发送SMTP通知。尝试用HTTP代理经CONNECT失败:代理只允许443。切换SOCKS5立解,因为SOCKS5对协议中立,在587端口直接连通,不受应用层理解限制。结论:非HTTP协议自然选SOCKS5。
案例3:HTTPS大批量公开数据采集
采集大量HTTPS页面时工程师对比两种模式。大量短连接下SOCKS5因省去额外CONNECT往返,建立延迟略低。启用HTTP代理的连接复用和keep-alive后,差异几乎消失。结论:短连接SOCKS5省握手,长连接差异不大。
案例4:自研二进制遥测协议
公司用自研TCP协议传遥测。HTTP代理概念上不适用——协议非HTTP。SOCKS5成为唯一合理通道:应用通过SOCKS5 agent打开普通socket,协议原样运行。结论:任意TCP非SOCKS5不可。
案例5:加速静态资源访问
内部服务频繁通过HTTP访问同一批静态资源。带缓存的HTTP代理通过返回缓存表示和正确处理条件请求,明显降低出站流量和响应时间。SOCKS5原理上给不了这种优化。结论:有重复HTTP请求处,带缓存HTTP代理带来可测收益。
FAQ:常见问题
同一个Proxeon账号能同时用于HTTP和SOCKS5吗?
通常可以——只是方案和端口不同。在面板确认各模式对应端口及认证方式。技术上同一资源以两种模式提供。
不确定需要哪种协议时选什么?
若应用只处理HTTP和HTTPS——从HTTP代理开始,配置简单且有日志缓存。只要出现一个非HTTP协议或UDP——选更通用的SOCKS5。
为什么HTTPS下HTTP代理与SOCKS5差别几乎不可见?
因为HTTPS内容受TLS保护,两种代理都只是通道。HTTP代理此时经CONNECT也和SOCKS5一样是管道。区别只在协商隧道的方式:文本CONNECT vs 二进制握手。
协议选择影响谁做DNS解析吗?
间接影响。SOCKS5由ATYP字段控制:传域名则代理解析,传IP则客户端解析。HTTP代理中URL或CONNECT行里的名称也可能在代理侧解析。确切行为取决于客户端及设置,详细分析见专门材料。
在SOCKS5中传用户名密码安全吗?
经典SOCKS5对凭据没有内建加密。所以要在可信环境或配合额外防护使用。服务型代理常提供IP绑定,减少每次连接传密码的依赖。
能通过CONNECT隧道任意端口吗?
技术上规范不禁止,但实践中代理管理员常出于安全限制端口列表。最常见允许443。若需非标准端口,确认策略或考虑对端口中立的SOCKS5。
SOCKS5比HTTP代理匿名性更高吗?
本身没有。匿名性取决于传哪些元数据、记录哪些日志、流量是否受TLS保护,而非协议类型。HTTP代理可能加暴露客户端的服务头,但正确配置可避免。SOCKS5不加应用头只是因为它看不见。
目标服务器经代理不可达时会怎样?
HTTP代理返回HTTP错误码,如502或504。SOCKS5在连接命令回复中返回错误码——如主机不可达或连接被拒。两种情况下客户端都收到明确信号,只是形式不同:HTTP为文本,SOCKS5为二进制。
UDP需要单独代理吗?
UDP仅SOCKS5通过UDP ASSOCIATE支持。HTTP代理不处理UDP。该命令机制在专门文章详述,这里只记事实:需要UDP就是SOCKS5的领域。
怎么知道代理确实以所需模式工作?
最可靠是带-v的curl发请求看对话。HTTP代理会看到绝对URI或CONNECT行,SOCKS5则到请求前都无文本HTTP对话且响应码正确。另可通过显示你IP的服务验证出站地址。
结语:如何做出正确决策
我们从两种协议的哲学走到具体代码行。工程化总结,不啰嗦。
HTTP代理是应用层的聪明中介。它懂HTTP,能看见并修改未加密请求,能缓存并记详细日志。其CONNECT方法让它变成HTTPS及其他协议的TCP隧道,但受允许端口限制。当你主要处理HTTP和HTTPS并看重可观测性与缓存时选它。
SOCKS5