# 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]`

具名的要求或回應正文規則，參照受管理的本機腳本。App 編輯器與 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，或使用 App 腳本編輯器管理資源，審查後再啟用。
