Whistle 兼容性
了解 PostGate 对 Whistle 规则协议的支持范围和行为差异。
PostGate 的兼容基线是 Whistle v2.10.6,对应提交 5e9ac58c979d3713a59fdc3471df296cd0f66071(2026-07-11)。本文所说的“支持”,是指 PostGate 不仅能够解析规则,还能在 HTTP/1.1、HTTPS 中间人代理和 HTTP/2 流量中实际执行规则。
支持的能力
- 匹配:域名、URL 或路径前缀、精确匹配、通配符、正则表达式、无协议地址、端口和取反条件;还可以按方法、协议、端口、内容类型、请求头、主机名、客户端 IP、包含或排除条件以及状态码过滤。
- 路由:
host、hosts、直接http/https映射、proxy、http-proxy、https-proxy、socks、socks4、socks5。 - 请求改写:查询参数、路径、方法、请求头、身份信息、Cookie、CORS、内容类型、字符集、正文,以及正文的前置、追加、替换和写入。
- 响应改写:状态码与重定向、响应头、字符集、Cookie、CORS、内容类型、正文合并与替换、HTML/JavaScript/CSS 注入、缓存、附件和正文写入。
- 流量控制:请求与响应延迟、请求与响应限速,以及请求超时。
- 资源:代码围栏形式的内联值、全局 Values、本地文件、外部规则和远端 HTTP(S) 正文资源。
部分支持或 PostGate 特有
xhost当前与host行为相同,尚未实现 Whistle 在连接失败后的回退语义。delete可以删除请求头或响应头,但尚未覆盖 Whistle 的所有正文属性、Cookie 和尾部字段删除形式。headerReplace只会修改响应头,尚未实现 Whistle 完整的正则替换模型。enable/disable已实现捕获记录显示与隐藏、中止请求、强制写入正文和放宽合并大小;其他选项可能不会影响实际传输。weinre/debug使用 PostGate 的 Chobitsu/CDP 调试桥,而不是 Weinre。- PostGate 插件使用
@postgate/plugin-sdk,不与whistle.*包二进制兼容。
不支持
以下操作会保留为解析警告,不会被静默丢弃:
- PAC:
pac - 动态脚本:
rulesFile、reqRules、reqScript、resRules、resScript、frameScript - 流式管道与响应尾部字段:
pipe、trailers - 单规则 TLS 回调:
cipher、tlsOptions、sniCallback - Whistle 界面样式:
style - 回退代理:
xproxy、xhttp-proxy、xhttps-proxy、xsocks - 原始文件与模板文件:
rawfile、xrawfile、tpl、xtpl
HTTP/3 边界
macOS 发布构建会启用可选的 QUIC 功能,并提供与现有规则链路共用处理流程的本机 HTTP/3 监听入口。该入口不是 MASQUE 代理:PostGate 无法解密或改写 HTTP/3 CONNECT、CONNECT-UDP 或任意端到端 QUIC 数据报,因此这些请求会返回 501 Not Implemented。