跳到正文
不翻车专注 VPN 软件评测

gRPC 节点还能用吗?Xray 说不推荐,测试服务器上做给你看

不翻车编辑部 · 更新于

gRPC 科普封面:协议科普,测试服务器实测,它到底是什么

先说结论:节点后面写着 gRPC,现在还能用。Xray 从 v24.12.15(2024 年 12 月 15 日)起给 gRPC 加了“即将删除”的提示,到 v26.1.23(2026 年 1 月 23 日)改成了“短期内不删”那一档。所以手上的 gRPC 节点能连、速度也满意,就不用急着换;自己新搭节点的话,传输方式直接选 XHTTP。下面的实测是 2026 年 10 月 18 日在我们的测试服务器上做的(Xray 26.3.27,客户端和服务端在同一台机器上,只看行为不测速度),官方资料来自 Xray 文档和源码、grpc.io、Cloudflare 文档,出处列在文末。

测试服务器启动 Xray 26.3.27:gRPC 入站打出弃用警告,is deprecated, not recommended for using and might be removed

上面这行黄字是 Xray 自己打的:gRPC 传输“有不必要的开销”,已经过时、不推荐再用、以后可能删,请尽快换成 XHTTP 的 stream-up H2 模式。第一次看到的人多半会慌,其实它只是提醒,节点照样跑。

gRPC 是协议吗?不是,是传输方式

VLESS、Trojan 这些是协议,管的是包裹里装什么、面单怎么写;传输方式管的是用什么车把包裹送过去。同一个 VLESS,可以直接走 TCP(Xray 里叫 RAW),也可以装进 gRPC 里送。所以节点信息里常写成“VLESS + gRPC”,前面是协议,后面是传输方式。

自建常用的 3x-ui(v3.10.2)里,添加入站时点开“传输”,gRPC 和 WebSocket、XHTTP 排在一起;选中以后会多出“服务名”“Authority”“多模式”三项。

3x-ui v3.10.2 添加入站的传输下拉:RAW、mKCP、WebSocket、gRPC、HTTPUpgrade、XHTTP、XDRIVE

3x-ui 选中 gRPC 后的表单:服务名、Authority、多模式

它从哪来:谷歌做的远程调用框架

gRPC 本来跟翻墙没关系。grpc.io 写着,它最早是谷歌做的:谷歌内部用一套叫 Stubby 的系统让数据中心里的大量后台服务互相调用,用了十几年,2015 年 3 月决定把下一代版本开源,就是 gRPC。现在很多公司的 App 和自家服务器之间就用它通信。

grpc.io:gRPC was initially created by Google,In March 2015 决定开源

它跑在 HTTP/2 上,HTTP/2 就是现在浏览器打开大多数网站时用的那一版协议。翻墙软件借用它,图的是代理流量混在里面,看起来像普通 App 在和自己的服务器说话。

多路复用:10 个下载只有 1 条连接

HTTP/2 自带多路复用,Xray 文档也写着 gRPC“内置多路复用”。我们在测试服务器上同时开 10 个下载试了一下:走普通 TCP,服务器上数到 10 条连接;换成 gRPC,同样 10 个下载,只有 1 条。

测试服务器 ss -tn:gRPC 连接数 1,普通 TCP 连接数 10

服务端访问日志照样记了 10 行,一个下载一行,来源全是同一个端口 48922,也就是那一条连接。

Xray 访问日志:10 行 speed.cloudflare.com:443,来源都是 127.0.0.1:48922

连接少,建立连接的次数就少,打开网页能省一点等待。代价在后面“缺点”里说。

抓包看看:它就是一次标准的 gRPC 调用

先故意不加 TLS 抓一次(h2c)。客户端发出的第一个请求头是 POST /bfc66/Tun,bfc66 是我们填的服务名,Tun 是 Xray 固定加的;content-type: application/grpc;用户代理和 Chrome 浏览器一样(v26.3.27 起去掉了 grpc-go 的版本后缀)。服务器回 200,结束时补一句 grpc-status: 0,表示调用正常结束。

tshark 解析不加密的 gRPC 连接:POST /bfc66/Tun、content-type application/grpc、Chrome 用户代理、grpc-status 0

实际使用都会套 TLS。套上以后,路上能看到的只剩握手里的网站名(这里是自签证书的 grpc.example.com)和 ALPN 里的 h2,后面全是加密数据,路径和服务名都看不到。

套上 TLS 后抓包:Client Hello 里只有 Server Name 和 ALPN h2,之后全是 Application Data

它当年为什么流行

能过 CDN。 节点放在 Cloudflare 这类 CDN 后面,墙看到的是你在连 CDN。Xray 作者 RPRX 在介绍 XHTTP 的长文里写过,多年经验是 GFW 不会永久封锁大型 CDN 的整个 IP,否则会波及太多常规网站。Cloudflare 文档写着免费套餐也支持 gRPC,条件是端口 443、要有 TLS 和 HTTP/2;没打开 gRPC 开关时,gRPC 请求会被直接回 403。

Cloudflare 文档:没开启 gRPC 时回 403 Forbidden;Free 套餐可用

比 WebSocket 少一个特征。 Xray 源码给 WebSocket 的弃用提示里写着“with ALPN http/1.1”,也就是它建立连接时用的老版本 HTTP 是个明显特征;gRPC 走 HTTP/2,看着更像现在的网页流量。

缺点

  1. 会被认出来是 gRPC。 Xray 文档写着“gRPC 服务存在被主动探测的风险”。主动探测就是墙怀疑一台服务器时,自己假装访客去访问它。我们像浏览器那样访问 gRPC 端口,回的是 HTTP/2 415、grpc-status: 3;换个服务名再访问,回 unknown service other。正常网站会给一个网页,这里等于直接说明“我跑的是 gRPC”。文档建议前面放 Nginx 或 Caddy,按路径分流,路径对了才转给 Xray。
  2. 不支持回落。 回落是 Xray 把“不是自己人”的访问转给一个真网站去应付,gRPC 用不了。
  3. 一条连接卡住,全部跟着卡。 所有请求挤在同一条连接上。RPRX 在长文里专门提到 gRPC 始终复用同一条连接导致的“断流”体验。
  4. 额外开销。 弃用提示里写着“unnecessary costs”。RPRX 列的 XHTTP stream-up 相比 gRPC 的好处:不需要 gRPC 库、性能更好;下行是独立的 GET 请求,不受 CDN 对 gRPC 的流量限制;还有 header padding、XMUX 等增强。

Xray 文档 gRPC 页的警告:不支持回落;存在被主动探测的风险,建议 Caddy 或 Nginx 通过 Path 前置分流

像浏览器一样访问 gRPC 端口:HTTP/2 415、grpc-status 3;换服务名回 unknown service other

#4113:stream-up 比 gRPC 传输层的优势,性能更好、不会受到 CDN 对 gRPC 的流量限制

Xray 官方到底什么态度

翻 Xray 源码能看到时间线:

  • v24.12.15(2024-12-15):gRPC 第一次加上弃用提示,用的是 PrintDeprecatedFeatureWarning,也就是“即将删除”那一档。
  • v26.1.23(2026-01-23):改成 PrintNonRemovalDeprecatedFeatureWarning。源码注释写的是“won’t be removed in the near future”,短期内不会删。
  • v26.3.27:同一个文件里,HTTP 和 QUIC 两种传输已经是“已删除”,配置里写了会直接报错;gRPC、WebSocket、HTTPUpgrade 停在“不推荐但能用”。

Xray 源码 v26.3.27:gRPC、WebSocket 是不推荐提示,HTTP、QUIC 是已删除报错

Xray 源码:两档弃用提示的注释,短期不删和即将删除

文档 gRPC 页最上面的红框也写着:推荐换用 XHTTP。也就是说,gRPC 不是明天就不能用,而是开发者不再往它身上花力气,新东西都加在 XHTTP 上。

Xray 文档 gRPC 页:DANGER 推荐换用 XHTTP

该怎么选

  • 别人给的节点写着 gRPC:能连上、速度够,就接着用,不用为了这行提示折腾。
  • 自己搭节点:新建时传输选 XHTTP,3x-ui 里就在 gRPC 往下数第二格。它同样走 HTTP/2、同样能过 CDN。具体看 XHTTP 那篇。
  • 已有 gRPC 节点要套 CDN:记得在 CDN 那边打开 gRPC 支持,不然会碰上 403。

常见问题

gRPC 节点比 WebSocket 快吗? 没法一句话回答,看你那边的线路。同一个节点换两种传输各测几次,以你自己测出来的为准。

面板里的“多模式”要开吗? Xray 文档说 multiMode 是实验性选项,测试环境里约有 20% 的性能提升,但不保证跨版本兼容,一般不用动。

哪些客户端支持 gRPC? v2rayN(Xray 内核)、Clash Verge(mihomo 内核,配置里叫 grpc-opts)、sing-box 都支持。sing-box 文档写着默认安装不包含标准 gRPC,用的是它自己的简化实现。

gRPC 和 XHTTP 能互通吗? 不能,两边要选同一种传输。换传输方式等于换一条新节点,客户端要重新导入。

资料来源