HTTP 规则

共有 4 种 HTTP 层级规则类型。USER-AGENT 和 URL-REGEX 读取的是客户端发给 Chute HTTP 代理监听器的请求,因此只匹配到达那里的连接;经 TUN 或 SOCKS5 的连接没有可读的 HTTP 请求。它们对每条客户端连接只判定一次,依据的是该连接的第一个请求。MitM 解密在连接的策略选定之后才开始,所以解密出来的请求不会再与规则重新匹配。PROTOCOL,TCP 与 PROTOCOL,UDP 读的是传输层,在每一种入站上都能匹配;PROTOCOL 的应用层协议值来自 TUN 入站的协议嗅探,以及 HTTP 代理入站上的普通请求。SCRIPT 对任何连接都会评估。

USER-AGENT

USER-AGENT,Instagram*,DIRECT

如果请求的 User-Agent 匹配,则规则命中。支持通配符 * 和 ?。该头部读自每条连到 HTTP 代理监听器的客户端连接上的第一个请求;对 HTTPS 而言,这个请求就是客户端用来建立隧道的 CONNECT,所以规则看到的是客户端放在 CONNECT 上的 User-Agent——如果它发送了的话。


URL-REGEX

URL-REGEX,^http://google\.com.*,DIRECT

如果到达 HTTP 代理监听器的明文 HTTP 请求的 URL 匹配正则表达式,则规则命中。URL 以完整形式写出——http://host[:port]/path?query,端口为 80 时省略——正则表达式必须匹配完整的 URL,而不是其中的一个子串:仅写 ^http://google\.com 匹配不到 http://google.com/,因为路径也是 URL 的一部分。CONNECT 隧道(HTTPS,或客户端经隧道传输的其他任何流量)和 TUN 连接都没有 URL,所以 URL-REGEX 永远不会匹配它们,用 MitM 解密 HTTPS 连接也不会改变这一点。规则匹配试运行,即 HTTP 控制 API 上的 POST /api/rules/match,会让 URL-REGEX 拿它的 url 字段原样来匹配,所以要给它完整的 URL。


PROTOCOL

PROTOCOL,TLS,Proxy

如果检测到的连接协议匹配,则规则命中。与 sniffing-enabled 结合使用效果最佳。NETWORK 可作为 PROTOCOL 的别名使用。

可接受的协议值:HTTP、HTTPS、TLS、TCP、UDP、QUIC、STUN、MTPROTO、DNS、DOH、DOH3、DOQ、DOT。

注意:检测到的协议在以下几处填充。对于 TUN 入站会话,开启 sniffing-enabled 后,TCP 连接只有在 Chute 还不知道其主机名时才会被嗅探为 HTTP 或 TLS(任何 TLS 连接,包括 HTTPS):连向虚拟 IP 的连接,或连向由 Chute DNS 解析出的地址的连接,会沿用那个名字而不被嗅探,因此对于名字由 Chute 解析的 TUN 流量,PROTOCOL,HTTP 与 PROTOCOL,TLS 很少能命中。UDP 流按报文形状识别为 QUIC——经 TUN 和经 SOCKS5 入站的 UDP 中继都是如此——不需要 sniffing-enabled。开启 sniffing-enabled 后,Chute 还会从 QUIC 流的 Initial 报文中读出服务器名,让 DOMAIN 类规则也能命中该流(见杂项选项中的 sniffing-enabled)。在 HTTP 代理入站上,普通(非 CONNECT)请求直接就是 HTTP,根本不需要嗅探,因为它的请求头刚刚才从这条连接上解析出来;CONNECT 则不会设置协议,SOCKS5 入站上的 TCP 连接也从来得不到协议——但 PROTOCOL,TCP 与 PROTOCOL,UDP 读的是会话的传输层,每个入站都会填,因此这两个值在那里同样命中。开启 encrypted-dns-follow-outbound-mode = true(见 DNS 服务器)后,Chute 自身的加密 DNS 上游连接会以 DOH、DOT、DOQ 和 DOH3 参与匹配:这四种随后都使用规则指定的策略——DoQ 与 DoH3 经由该策略的 UDP 中继;该策略不承载 UDP 时,由 udp-policy-not-supported-behaviour 决定如何处理——而 REJECT 判定会跳过这四种中的任意一种。HTTPS 是被嗅探出的 TLS 握手的另一种写法,所以 PROTOCOL,HTTPS 与 PROTOCOL,TLS 匹配的是同一批流量。STUN、MTPROTO 和 DNS 为兼容而接受,但目前没有检测器会产生它们。


SCRIPT

SCRIPT,MyRuleScript,DIRECT

规则通过执行 JavaScript 脚本实现自定义匹配逻辑。脚本名称必须与 [Script] 段中定义的 type=rule 脚本匹配。

[Rule]
SCRIPT,CheckInternal,PROXY

[Script]
CheckInternal = type=rule, script-path=internal-check.js

规则脚本接收 $request,并且必须调用 $done({matched: true}) 或 $done({matched: false})。注意 $request.dnsResult 仅在会话已被解析时可用(例如,直接使用 IP 地址发起的请求,或 DNS 解析后的第二轮匹配)。

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""