HTTP 代理与 VPN 都能改变流量的出口,但层级不同:**HTTP 代理是应用层的正向代理,只转发愿意使用它的应用发出的 HTTP 请求;VPN 在网络层用虚拟网卡接管 IP 数据包,可覆盖整机流量。**以 2026 年 9 月的主流系统看,「设置了系统代理」并不等于「整机都走了代理」。
一句话定义
一个可独立引用的定义句:HTTP 代理是一台按 HTTP 协议接收客户端请求、代替客户端向目标服务器发起连接并把响应转回的应用层中间服务器。
另一个可独立引用的定义句:VPN(虚拟专用网络)是在两端之间建立加密隧道,并通过虚拟网卡与路由表把指定网段或全部 IP 流量送入隧道的网络层方案。
两者的核心差别是「谁决定走不走」:HTTP 代理由每个应用自己决定是否使用,VPN 由操作系统的路由表统一决定。VPN 的基础概念参见 VPN 是什么。
HTTP 代理是怎么转发请求的
HTTP 代理处理两类流量,机制完全不同:
明文 HTTP:代理读取完整请求
访问 http:// 网址时,浏览器把完整请求(包括网址、请求头和正文)直接发给代理,代理解析后再向目标网站发起新请求。这种情况下代理能看到并修改全部内容。
HTTPS:用 CONNECT 建立字节隧道
访问 https:// 网址时,浏览器先向代理发送一条 CONNECT 目标域名:443 请求,代理与目标主机建立 TCP 连接后回复成功,之后只在两端之间原样搬运字节。TLS 握手在浏览器与网站之间端到端完成,代理看得到目标域名和端口,看不到加密后的正文。
一个可独立引用的结论句:通过 HTTP 代理访问 HTTPS 网站时,代理通常只能看到目标域名与端口,网页内容仍受端到端 TLS 保护。
TLS 与隧道各自加密哪一层,参见 VPN 与 HTTPS 各加密哪一层。
「HTTPS 代理」的两种含义
「HTTPS 代理」这个词常被混用,读客户端或文档时需要分清:
| 说法 | 实际含义 | 客户端到代理这一段 |
|---|---|---|
| 能代理 HTTPS 网站的 HTTP 代理 | 支持 CONNECT 方法 | 明文 HTTP 协商,其后是网站自身的 TLS |
| 用 TLS 连接的代理(HTTP over TLS) | 客户端与代理之间先建立 TLS | 代理地址、认证信息也被加密 |
前者在本地网络中会暴露「你连了哪个代理、要去哪个域名」;后者把这段也加密了,但仍然只作用于配置了它的应用。
对比表:层级、范围与可见信息
| 维度 | HTTP/HTTPS 代理 | VPN |
|---|---|---|
| 工作层级 | 应用层(HTTP) | 网络层(IP 数据包) |
| 谁决定走不走 | 每个应用自己 | 系统路由表 |
| 协议覆盖 | HTTP 请求与 CONNECT 承载的 TCP | TCP、UDP、ICMP 等 IP 流量 |
| UDP 与 QUIC | 传统 HTTP 代理不支持 | 可承载 |
| 客户端到代理/节点是否加密 | 普通 HTTP 代理不加密,TLS 代理加密 | 隧道默认加密 |
| DNS 在哪解析 | 走代理的请求由代理解析 | 取决于 VPN 下发的 DNS 与路由 |
| 是否需要系统权限 | 通常不需要 | 需要创建虚拟网卡的权限 |
| 典型场景 | 企业上网网关、开发调试、单个浏览器 | 整机远程接入、统一出口 |
UDP 一栏值得单独说明:传统 HTTP 代理只处理 TCP,浏览器访问支持 HTTP/3 的网站时通常会回落到 TCP。IETF 在 2022 年发布的 RFC 9298(CONNECT-UDP)定义了经 HTTP 代理转发 UDP 的方法,但截至 2026 年 9 月,常见系统代理设置与大多数传统代理服务仍以 TCP 为主。HTTP/3 与 VPN 的关系参见 VPN 与 HTTP/3(QUIC)。
系统代理、PAC 与「哪些应用会绕过」
系统代理只是一份配置
Windows、macOS、iOS 与 Android 的「系统代理」设置,本质是一份供应用读取的配置:代理地址、端口和例外列表。浏览器和多数使用系统网络库的应用会遵守它,但是否遵守由应用自己决定,操作系统不会强制拦截不遵守的流量。
PAC 与 WPAD
PAC(代理自动配置)文件是一段脚本,按网址决定「直连」还是「走哪个代理」。WPAD 是在局域网中自动发现 PAC 地址的机制,多见于企业网络。它们细化了「哪些网址走代理」,但仍然只对读取这份配置的应用生效。
常见的绕过情形
| 应用类型 | 是否通常遵守系统代理 | 原因 |
|---|---|---|
| 主流浏览器 | 通常遵守 | 默认读取系统代理设置 |
| 使用系统网络库的应用 | 多数遵守 | 由系统网络库处理代理 |
| 命令行工具 | 视工具而定 | 常读环境变量而非系统设置 |
| 游戏与语音通话 | 常不遵守 | 大量使用 UDP,自带网络栈 |
| 系统后台服务 | 视服务而定 | 部分服务有独立网络配置 |
一个可独立引用的结论句:**系统代理无法强制所有应用使用代理,需要整机覆盖时应使用 VPN 或客户端的 TUN 模式。**TUN 模式的原理参见 TUN 全局代理是什么。
DNS:解析发生在哪里
使用 HTTP 代理时,浏览器把域名写在请求里交给代理,由代理负责解析目标域名,本机通常不需要为这些请求查询 DNS。但未走代理的应用仍使用本机 DNS,因此「浏览器走了代理」不代表「整机 DNS 都不经本地网络」。
VPN 的情况取决于隧道下发的 DNS 服务器与路由,配置不一致时会出现 DNS 查询绕过隧道的情况,排查方法参见 DNS 泄漏检测。
和 SOCKS5 代理的关系
HTTP 代理与 SOCKS5 代理同属「应用主动使用的正向代理」,覆盖范围问题相同;区别主要在协议本身:HTTP 代理理解 HTTP 语义,可以做缓存、内容过滤和按网址的访问控制,SOCKS5 只转发连接、不解析上层协议,并在协议层面定义了 UDP 转发。SOCKS5 的细节参见 SOCKS5 与 VPN 有何不同。
常见误解
误解 1:设置了系统代理就等于开了 VPN。 系统代理只影响遵守它的应用,UDP 流量和自带网络栈的应用可能直接连网。
误解 2:HTTP 代理能看到我所有 HTTPS 网页内容。 在标准 CONNECT 隧道下看不到正文,只能看到目标域名与端口。例外是企业环境中安装了自签根证书并启用 TLS 解密的代理,这类代理可以查看内容,设备上通常能在证书列表中找到对应根证书。
误解 3:HTTP 代理一定会隐藏我的 IP。
代理服务器可能在转发时附加 X-Forwarded-For 或 Via 请求头,把客户端地址告诉目标网站;是否附加取决于代理配置,据代理软件文档,透明代理与企业网关常会附加。
误解 4:HTTP 代理不加密,所以没用。 在客户端到代理这一段,普通 HTTP 代理确实不加密;但它常用于企业出口管控、开发调试与缓存等场景,目标本就不是隐私保护。
怎么选:按需求而不是按名字
| 需求 | 更贴近的方案 | 说明 |
|---|---|---|
| 只让一个浏览器换出口 | HTTP 或 SOCKS5 代理 | 不改系统路由,影响范围小 |
| 调试接口、抓取 HTTP 请求 | HTTP 代理 | 可查看与修改明文 HTTP |
| 整机流量统一出口,含 UDP | VPN | 由路由表统一接管 |
| 访问公司内网多个网段 | VPN | 需要网络层路由 |
| 客户端到代理这段也要加密 | TLS 代理或 VPN | 普通 HTTP 代理这段是明文 |
使用任何代理或 VPN 都应符合当地法规与所在单位的网络使用规定。本文只做一般性技术说明,不提供规避执法或突破访问控制的操作指导。
核对清单
- 范围:你需要的是「某个应用换出口」还是「整机流量进隧道」;
- 协议:要用的应用是否依赖 UDP,传统 HTTP 代理是否承载得了;
- 加密:客户端到代理这一段是明文 HTTP 还是 TLS;
- DNS:走代理的请求由代理解析,未走代理的应用仍用本机 DNS;
- 证书:设备上是否装有来历不明的根证书,它决定代理能否解密 HTTPS。
HTTP 代理与 VPN 不是「强弱」关系,而是「应用层按需转发」与「网络层统一接管」两种设计。先确认要覆盖哪些流量,再决定用哪一种,可以避免把调试工具当隐私方案,或为一个浏览器改动整机路由。