匹配与替换
匹配与替换在流量通过代理时自动修改流量,无需暂停或对每个请求手动操作。
规则的工作方式
每条规则定义要查找的内容及处理方式。当请求或响应符合条件时,规则会立即应用其转换。
规则按列表中的顺序应用。如果两条规则针对同一个头部,第一条匹配的规则先应用,后续规则看到的是该更改的结果。
规则字段
| 字段 | 说明 |
|---|---|
| 名称 | 规则的标签。使用描述性名称来标识其用途。 |
| 方向 | 规则应用于请求、响应还是两者 |
| 操作 | 要执行的转换(参见下方操作表) |
| 匹配模式 | 依据操作,可为字面量、正则表达式或完整内容 |
| 匹配值 | 要查找的字符串或模式 |
| 替换值 | 要替换成的值 |
| 已启用 | 无需删除规则即可启用或停用的开关 |
| 筛选条件 | 可选的方法、主机、路径和 HTTPQL 条件,用于限制规则应用范围 |
操作
| 操作 | 功能 |
|---|---|
| 添加标头 | 添加具有固定名称和值的新头部 |
| 移除标头 | 按名称删除头部 |
| 替换标头 | 替换现有头部的值 |
| 替换正文 | 使用匹配值替换消息体的一部分 |
| 路径 / 查询 / 查询参数 | 更改请求路径或查询值 |
| 请求 / 响应行 | 更改选定的 HTTP 起始行组成部分 |
| 状态码 | 更改响应状态 |
| 原始消息 | 同时转换 HTTP 起始行、头部和消息体 |
| WebSocket 载荷 | 替换匹配的客户端/服务器消息内容 |
| 工作流 | 对选定内容运行已启用的转换工作流 |
匹配模式
字面文本匹配精确字符串。适用于固定令牌、头部名称或特定值。
正则表达式使用正则表达式匹配。目标内容会变化时使用此模式,例如匹配每次会话都会变化的令牌,或捕获分组并在替换中复用。
在正则表达式替换中,使用 $1、$2 等捕获分组,在替换值中引用匹配的部分。
整体替换将整个选定内容传递给转换,而不是查找子字符串。有些操作(例如添加/移除具名头部)使用字面名称,不提供所有模式。
转换完整响应体
- 创建并启用转换工作流,然后用测试输入验证它。
- 创建匹配与替换规则,方向设为响应,操作设为工作流(正文)。
- 选择整体替换匹配模式,并选择工作流。
- 使用 HTTPQL 筛选条件缩小规则范围,例如:
text
req.host.eq:"cdn.example.com" AND (req.path.cont:".js" OR resp.headers["Content-Type"].value.cont:"javascript")工作流接收整个消息体,其输出会替换该消息体。工作流(标头)转换具名头部,而工作流(原始标头)转换头部块。这些输入与响应体不同。
HTTPQL 筛选条件在可用的请求/响应上下文中检查。请求方向的规则不能依赖尚未到达的响应。如果规则产生大量运行,请禁用工作流日志;诊断转换问题时再临时启用。
调整规则顺序
拖动规则行,调整其在列表中的位置。当规则修改同一请求或响应中重叠的部分时,顺序非常重要。
AI 辅助
在规则编辑器中点击 使用 AI 填写,用自然语言描述想要的更改。Ogma 会根据描述生成规则字段。启用规则前,请检查并调整生成的值。
有效提示的示例:
- “移除所有响应中的 X-Frame-Options 头部”
- “将 Authorization 头部值替换为我的测试令牌”
- “给所有请求添加名为 X-Debug、值为 true 的头部”
测试规则
在为实时流量启用规则前,先用示例请求进行测试:
- 打开规则编辑器。
- 将原始 HTTP 请求粘贴到测试面板中。
- 点击应用规则。面板会显示结果及应用了哪些规则。
- 确认输出符合预期。
- 启用规则。
测试面板还提供响应目标,包含状态、头部和消息体输入。请检查已应用规则列表:这测试的是适用的规则,而不只是单独的编辑器字段。
匹配与替换与拦截
匹配与替换是自动的。规则启用后,无需你采取任何操作,就会转换每个匹配的请求或响应。
拦截暂停流量并等待手动决定。当正确的更改取决于你需要逐个请求评估的上下文时,使用拦截。当同一转换应每次应用且无需检查时,使用匹配与替换。
常见用途
- 在所有请求中替换会话 Cookie,以测试另一个账号。
- 添加启用调试或管理员模式的头部。
- 移除响应中的安全头部,以评估客户端行为。
- 替换重定向响应中硬编码的主机。
- 重写请求路径前缀。