[Header Rewrite] 请求头重写
本节用于在 HTTP 请求发往上游前修改请求头,支持添加、删除、覆盖及正则替换操作。
HTTPS 流量需先在 MITM 中配置解密后方可读取和修改请求头。
语法声明
本章节每行定义一条请求头重写规则,参数之间以空格分隔:
ini
[Header Rewrite]
http-request pattern action header_name [arguments...]行内结构拆解如下:
http-request:触发阶段标识,指定规则作用于客户端请求阶段。pattern:正则表达式,匹配请求的完整 URL。action:首部操作指令,指定对目标字段执行的具体处理动作。header_name:目标 HTTP 首部字段名称,匹配时不区分 ASCII 大小写。[arguments...]:操作指令所需的具体参数(如新的字段取值,或正则表达式及其替换内容)。
操作指令与参数
header-add/add(参数:<value>) 向请求头中追加指定字段与取值。若请求中已存在同名字段,系统保留原始字段并追加该新值。header-del/del/delete(无附加参数) 移除请求头中与header_name匹配的所有字段。header-replace/replace(参数:<value>) 将请求头中已有字段的取值整体覆盖为<value>。若请求头中不存在该字段,系统保持原样,不新增字段。header-replace-regex/replace-regex(参数:<regex> <replacement>) 对请求头中已有字段的取值执行正则表达式匹配与替换。若请求头中不存在该字段,系统保持原样。
处理机制与约束
- Host 字段约束:
Host头由请求 URL 决定,无法通过本节直接修改。修改目标主机需使用 URL Rewrite。 - 规则执行顺序:多条规则按书写顺序自上而下串行应用。后置规则在前置规则修改后的请求头基础上继续处理。
- 管线协同:请求头重写发生在 URL Rewrite 之后、请求分流与建立外部连接之前。
配置示例
基础配置
ini
[Header Rewrite]
# 移除指定域名的 Cookie 请求头
http-request ^https?://tracking\.example\.com/ header-del Cookie
# 替换客户端 User-Agent 标识
http-request ^https?://.*\.example\.com/ header-replace User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
# 添加 Authorization 头
http-request ^https?://api\.internal\.example\.com/ header-add Authorization Bearer <TOKEN>
# 正则替换 Referer 头
http-request ^https?://.*\.example\.com/api/ header-replace-regex Referer https?://[^/]+/ https://example.com/