URL書き換え
ChuteはリクエストのURLを異なる方法で書き換えたり、URLに基づいて特定のリクエストを拒否したりできます。
1つのリクエストに適用できるルールは1つだけです。
注意: 平文HTTPのリクエストが処理されるのは、ChuteのHTTPプロキシを経由して届いた場合だけです。TUNインターフェースから届いた平文HTTPは手を加えずに転送されます。Chute Androidは、設定でシステムHTTPプロキシをオンにしない限り、すべてのトラフィックをTUNに通します。このオプションはChuteのHTTPプロキシをアプリに渡すものです(Android 10以降。デフォルトはオフ)。HTTPSのリクエストが処理されるのは、そのホストがMitMで復号される場合だけです。
例:
[URL Rewrite]
^http://www\.google\.cn http://www.google.com header
^http://amazon\.cn https://z.cn 302
^http://ad\.com/ad\.png _ reject
^http://tracker\.com/event _ reject-200
^http://ad\.com/pixel _ reject-img
^http://api\.example\.com/block _ reject-dict
^http://api\.example\.com/list _ reject-array
^http://ad\.com/beacon _ reject-tinygif
書き換えルールは3つの部分で構成されます: 正規表現、置換、タイプ。各部分は空白で区切られ、#、;、//のいずれかで始まる最初の単語から行末までがコメントになります。このセクションには引用符がありません。コメントを参照してください。
拒否タイプ(
reject、reject-200、reject-img、reject-dict、reject-array、reject-tinygif)については、_プレースホルダーを省いた2トークンの短縮形<pattern> rejectも受け付けられます。短縮形ではShadowrocketのreject-dropとreject-no-drop(どちらもrejectとして応答)、reject-video(reject-200として応答)も受け付けられます。この3つが受け付けられるのは短縮形だけで、3トークンの行のタイプとしては使えません。2番目のトークンがrejectキーワードでない2トークンの行は、そのURLへのheaderモードの書き換えとして読まれます。^http://a\.com http://b.comは^http://a\.com http://b.com headerと同じです。rejectキーワードの綴りに注意してください —reject200はキーワードではないため、^http://ad\.com reject200はreject200へのheaderモードの書き換えとして読まれます。この置換先は絶対URLでも絶対パスでもないので、リクエスト時に書き換えは警告をログに残して拒否され、リクエストはそのまま転送されます — 拒否もされず、書き換えもされません。Chuteが自分で生成する応答 — Map Local、スクリプトの
response、URL書き換えとREJECT系ポリシーの応答およびエラーページ — はHTTPに従います。HEADリクエストへの応答はヘッダーだけで、Content-LengthはGETの場合と同じです。ステータスが204、205、304の応答は、ボディもContent-Lengthも持ちません。
ヘッダーモード
Chuteはリクエストヘッダーを変更し、必要に応じてリクエストを別のホストにリダイレクトします。クライアントはこの書き換えアクションに気付きません。(このモードはSurgeの"Map Remote"に相当します。)
リクエストヘッダーの"Host"フィールドが新しいURLに合わせて変更されます。
[URL Rewrite]
^http://www\.google\.cn http://www.google.com header
置換には/new/pathのようなパスのみの形式も使用できます。その場合、リクエストラインだけが新しいパスに書き換えられ、リクエストは引き続き同じホストに送信されます。スキームと://で始まる置換だけがURLとして扱われるため、/go?to=http://example.com/のようにクエリ文字列にURLを含むパスも、パスのみの置換のままです。
宛先をそのまま書き換えできない場合 — 例えば、平文HTTPリクエストを
https://URLに書き換える場合、(MitM有効時の)HTTPSリクエストを別のオリジンに書き換える場合、あるいはすでに確立した平文HTTPのkeep-alive接続上の後続リクエストが、別のホストを指定するルールにマッチした場合 — Chuteは透過的なヘッダー書き換えの代わりに、新しいURLへの307リダイレクトをクライアントに返す動作へ自動的にフォールバックします。
302モード
Chuteは単に302リダイレクトレスポンスを返します。ホスト名のMitMが有効になっている場合、HTTPSリクエストもリダイレクトできます。
[URL Rewrite]
^http://amazon\.cn https://z.cn 302
307モード
Chuteは単に307一時リダイレクトレスポンスを返します。ホスト名のMitMが有効になっている場合、HTTPSリクエストもリダイレクトできます。
[URL Rewrite]
^http://amazon\.cn https://z.cn 307
拒否モード
パターンがマッチした場合、リクエストを拒否します。置換パラメータは無視されます。HTTP 503レスポンスを返します。ホスト名のMitMが有効になっている場合、HTTPSリクエストも拒否されます。
[URL Rewrite]
^http://ad\.com/ad\.png _ reject
Reject-200モード
HTTP 200 OKステータスとゼロ長のボディでリクエストを拒否します。エラー処理をトリガーせずにトラッキングリクエストを静かにブロックするのに便利です。
[URL Rewrite]
^http://tracker\.com/event _ reject-200
Reject-Imgモード
1x1の白いGIF画像(HTTP 200 OK)を返すことでリクエストを拒否します。壊れた画像プレースホルダーを発生させずに広告画像をブロックするのに便利です。
[URL Rewrite]
^http://ad\.com/pixel _ reject-img
Reject-Dictモード
空のJSONオブジェクト{}(HTTP 200 OK)を返すことでリクエストを拒否します。JSONレスポンスを期待するAPIコールをブロックするのに便利です。
[URL Rewrite]
^http://api\.example\.com/block _ reject-dict
Reject-Arrayモード
空のJSON配列[](HTTP 200 OK)を返すことでリクエストを拒否します。リストを期待するAPIコールをブロックするのに便利です。
[URL Rewrite]
^http://api\.example\.com/list _ reject-array
Reject-TinyGIFモード
1×1のGIF画像(HTTP 200 OK)を返すことでリクエストを拒否します。reject-imgと同じ応答のSurgeでの書き方です。
[URL Rewrite]
^http://ad\.com/beacon _ reject-tinygif
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。