Header 重写
Chute 可以在请求和响应头部被转发到服务器或客户端之前对其进行重写。
对于单个请求,可以应用多条规则。
注意:明文 HTTP 请求只有经由 Chute 的 HTTP 代理到达时才会被处理;经 TUN 接口到达的明文 HTTP 会被原样转发。Chute Android 让所有流量都经过 TUN,除非在设置中打开了系统 HTTP 代理,它会把 Chute 的 HTTP 代理交给应用使用(Android 10 及以上;默认关闭)。HTTPS 请求只有在其主机经 MitM 解密时才会被处理。
示例:
[Header Rewrite]
^http://example\.com.* header-add DNT 1
^http://example\.com.* header-del Cookie
^http://example\.com.* header-replace User-Agent Unknown
^http://example\.com.* header-response-add X-Server rack3
^http://example\.com.* header-response-del X-Powered-By
^http://example\.com.* header-response-replace Server nginx
重写规则由 4 个部分组成:URL 正则表达式、操作类型、头部字段和值。在这里,只有位于行首或紧跟在空格后面、且不在双引号内的 // 才会开启注释;# 和 ; 从不算注释,所以 header-add X-Color #ff0000 会保留其值。见注释。
注意:URL 正则表达式会在请求完整 URL 的任意位置匹配,也会单独拿路径去匹配(与 URL 重写相同):
^https://example\.com已覆盖该主机下的所有路径和查询字符串,无需在结尾加.*,^/api则会匹配路径以/api开头的每一个请求。已解密请求的完整 URL 以https://开头,所以^http://模式永远匹配不到这类请求。模式会保留原本的大小写,因此\S、\D、\W、\B的含义不会被改变;匹配本身不区分大小写。
请求与响应头部
前缀为 header- 的操作应用于请求头部(从客户端到服务器)。前缀为 header-response- 的操作应用于响应头部(从服务器到客户端)。
也接受 Surge 风格的方向前缀 http-request / http-response,写在 URL 正则表达式之前,例如 http-request ^http://example\.com.* header-replace Accept-Language en-us。
header-add
将请求头部中的某个头部字段设置为给定的值。如果该头部字段已存在,则会被覆盖;有多行的字段只剩下这一行新值。
示例:
[Header Rewrite]
^http://example\.com.* header-add DNT 1
修改前:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
修改后:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 1
header-del
从请求头部中删除一个头部字段;字段有多行时,所有行一并删除。
示例:
[Header Rewrite]
^http://example\.com.* header-del DNT
修改前:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 1
修改后:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
header-replace
替换请求头部中的头部值。如果该头部字段不存在,则不会发生任何操作。有多行的字段只剩下一行,值为新值。
示例:
[Header Rewrite]
^http://example\.com.* header-replace DNT 1
修改前:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 0
修改后:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 1
注意:
header-replace仅在头部字段已存在时生效。要在无论该字段是否存在的情况下设置头部字段,请使用header-add——它会覆盖任何同名的已有字段,因此无需再组合使用header-del和header-add。
header-replace-regex
用正则表达式改写已有头部值的一部分。规则依次写头部字段、作用于其值的正则表达式和替换内容,替换内容可以用 $1、$2 引用捕获组。头部字段不存在时不做任何事。正则表达式或替换内容含空格时用双引号括起来;"" 表示替换为空。
示例:
[Header Rewrite]
^https://example\.com header-replace-regex User-Agent "Chrome/[0-9.]+" Chrome/120.0.0.0
^https://example\.com header-response-replace-regex Set-Cookie "; Secure" ""
作用于头部值的正则表达式区分大小写。有多行的字段(例如响应里的多行 Set-Cookie)会逐行改写,所有行都保留。与其他动作一样,header-response-replace-regex(或 http-response 前缀)作用于响应头。
本页为英文版的翻译。如内容有出入,以英文版为准。