# HTTP 引擎与重写

## `[http-engine]`

内部 HTTP 引擎设置。

| 键 | 类型 | 说明 |
|---|---|---|
| `enabled` | 布尔值 | 启用引擎，默认 `false`。 |
| `capture-all` | 布尔值 | 处理指定 TCP 端口上的所有 IPv4 目标，默认 `false`；保留已有域名/CIDR 列表。 |
| `cidr-list` | IPv4 CIDR 列表 | 额外的目标 IP 捕获范围。 |
| `port-list` | 整数列表 | TCP 端口 1–65535，默认 `80,443`。 |
| `http3-policy` | `allow` 或 `block` | 默认 `allow`。阻止 HTTP/3 可能促使兼容客户端使用 TCP，不是 HTTP/3 解密。 |
| `mitm-bypass-apple-services` | 布尔值 | 默认 `true`，避免解密已知 Apple 服务域名。 |
| `mitm-bypass-domain-list` | 域名后缀列表 | 额外的不解密域名。 |
| `upstream-tcp-receive-window` | 整数 | 高级上游接收窗口大小：4096–1048576 字节，默认 262144。 |
| `domain-list` | 域名后缀列表 | 应用 HTTP 处理的域名；`*` 表示所有域名。 |
| `ca-p12` | 字符串 | base64 编码的 PKCS#12 CA，目前仅支持 RSA 密钥。 |
| `ca-passphrase` | 字符串 | `ca-p12` 证书密码。 |

```ini
[http-engine]
enabled=true
domain-list=example.com
ca-p12=...
ca-passphrase=...
```

## `[http-url-rewrite]`

定义 HTTP URL 重写规则，键为自定义规则名。

| 键 | 类型 | 说明 | 必填 |
|---|---|---|---|
| `match` | 正则表达式 | 匹配 URL。 | 是 |
| `action` | 字符串 | `reject` 或 `redirect-302`。 | 是 |
| `target` | 字符串 | 重定向目标 URL。 | 否 |
| `enabled` | 布尔值 | 默认 `true`。 | 否 |

```ini
[http-url-rewrite]
block-ads=match:^https?://ads\..*,action:reject
redirect-google=match:^https?://google\.com,action:redirect-302,target:https://duckduckgo.com
```

## `[http-body-rewrite]`

命名的请求或响应正文规则引用受管理的本地脚本。应用编辑器和 MFHRB 导入器共同管理脚本资源及其配置引用。不要在此粘贴远程脚本 URL 并期待自动下载或更新。

| 字段 | 说明 |
|---|---|
| `match` | 必填，匹配规范化完整 URL 的正则表达式，最多 4096 UTF-8 字节。 |
| `direction` | `request` 或 `response`，默认 `response`。 |
| `type` | 必填，`jq` 或 `javascript`。 |
| `body-mode` | `json` 或 `text`；jq 必须使用 JSON。jq 默认 `json`，JavaScript 默认 `text`。 |
| `script` | 必填，由编辑器/导入器生成的受管理本地资源引用。 |
| `priority` | 0–1000000，默认 100。较小值先执行；相同值按规则名排序。 |
| `enabled` | 配置语法默认 `true`；MFHRB 导入始终保存为禁用。 |
| `api-version` | `1`。 |
| `timeout-ms` | 仅 JavaScript：50–2000 ms，默认 500。 |

可移植 JSON 包使用 `bodyMode`、`timeoutMS` 等驼峰键，配置文本使用 `body-mode`、`timeout-ms`，两者是不同格式。[MFHRB 指南](../howtos/http-analysis-mfhrb.md)提供完整可分享示例、API 契约与审查流程。

例如，当前配置的脚本存储中已经存在受管理资源 `./feed-cleanup/remove-banner.jq`：

```ini
[http-body-rewrite]
remove-banner=match:^https://api\.example\.com/feed$,direction:response,type:jq,body-mode:json,priority:100,enabled:false,api-version:1,script:./feed-cleanup/remove-banner.jq
```

对应 jq 源码可以是 `.items |= map(select(.kind != "banner"))`，用于含 `items` 数组的 JSON 对象。该配置行不会创建文件；请导入 MFHRB 或使用应用脚本编辑器管理资源，审查后再启用。
