Перезапись URL
Chute может перезаписывать URL запроса различными методами или отклонять определённые запросы по URL.
К одному запросу может быть применено только одно правило.
Внимание: Обычный HTTP-запрос обрабатывается, только если он приходит в Chute через его HTTP-прокси; обычный HTTP, пришедший через интерфейс TUN, пересылается без изменений. Chute Android направляет весь трафик через TUN, если в настройках не включён Системный HTTP-прокси, который предоставляет приложениям HTTP-прокси Chute (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,reject-200,reject-img,reject-dict,reject-array,reject-tinygif) также принимается сокращённая запись из двух токенов<pattern> rejectбез заполнителя_. Сокращённая запись также принимаетreject-dropиreject-no-dropиз Shadowrocket — на оба отвечается как наreject, — иreject-video, на который отвечается как наreject-200; эти три принимаются только в сокращённой записи, но не как тип в строке из трёх токенов. Строка из двух токенов, второй из которых не является ключевым словом reject, читается как перезапись в режиме header на этот URL:^http://a\.com http://b.com— то же, что^http://a\.com http://b.com header. Следите за написанием ключевых слов reject —reject200таковым не является, поэтому^http://ad\.com reject200читается как перезапись в режиме header наreject200. Такая замена не является ни абсолютным URL, ни абсолютным путём, поэтому во время запроса перезапись отклоняется с предупреждением в журнале, а запрос пересылается без изменений: ни отклонён, ни перезаписан.Ответы, которые Chute формирует сам, — имитация ответов (Map Local),
responseскрипта, а также ответы и страница ошибки перезаписи URL и политик REJECT — следуют HTTP: ответ на запрос HEAD — это только заголовок, с тем Content-Length, который получил бы GET, а ответ со статусом 204, 205 или 304 не несёт ни тела, ни Content-Length.
Режим Header
Chute изменит заголовок запроса и при необходимости перенаправит запрос на другой хост. Клиент не заметит этого действия перезаписи. (Этот режим соответствует «Map Remote» в Surge.)
Поле Host в заголовке запроса будет изменено для соответствия новому URL.
[URL Rewrite]
^http://www\.google\.cn http://www.google.com header
Замена также может иметь вид только пути, например /new/path. В этом случае перезаписывается только строка запроса (request line) с новым путём, и запрос по-прежнему отправляется на тот же хост. URL считается только замена, начинающаяся со схемы и ://, поэтому путь, в параметрах запроса (query string) которого есть URL, например /go?to=http://example.com/, остаётся заменой только пути.
Когда назначение нельзя перезаписать на месте — например, при перезаписи обычного HTTP-запроса на URL со схемой
https://, при перезаписи HTTPS-запроса (с включённым MitM) на другой источник (origin) или при совпадении последующего запроса в уже установленном обычном HTTP-соединении keep-alive с правилом, называющим другой хост, — Chute автоматически отвечает клиенту перенаправлением 307 на новый URL вместо прозрачной перезаписи заголовков.
Режим 302
Chute просто вернёт ответ с перенаправлением 302. HTTPS-запросы могут быть перенаправлены, если для имени хоста включён MitM.
[URL Rewrite]
^http://amazon\.cn https://z.cn 302
Режим 307
Chute просто вернёт ответ с временным перенаправлением 307. HTTPS-запросы могут быть перенаправлены, если для имени хоста включён MitM.
[URL Rewrite]
^http://amazon\.cn https://z.cn 307
Режим Reject
Отклоняет запрос, если шаблон совпадает. Параметр замены будет проигнорирован. Возвращает ответ HTTP 503. HTTPS-запросы будут отклонены, если для имени хоста включён MitM.
[URL Rewrite]
^http://ad\.com/ad\.png _ reject
Режим Reject-200
Отклоняет запрос со статусом HTTP 200 OK и телом нулевой длины. Полезно для тихой блокировки запросов отслеживания без вызова обработки ошибок.
[URL Rewrite]
^http://tracker\.com/event _ reject-200
Режим Reject-Img
Отклоняет запрос, возвращая белое GIF-изображение 1x1 (HTTP 200 OK). Полезно для блокировки рекламных изображений без значков «битого» изображения.
[URL Rewrite]
^http://ad\.com/pixel _ reject-img
Режим Reject-Dict
Отклоняет запрос, возвращая пустой JSON-объект {} (HTTP 200 OK). Полезно для блокировки вызовов API, ожидающих ответ в формате JSON.
[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
Отклоняет запрос, возвращая изображение GIF 1×1 (HTTP 200 OK), — так в Surge называется тот же ответ, что и reject-img.
[URL Rewrite]
^http://ad\.com/beacon _ reject-tinygif
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.