Réécriture d'URL
Chute peut réécrire l'URL de la requête selon différentes méthodes, ou rejeter certaines requêtes en fonction de leur URL.
Une seule règle peut être appliquée à une même requête.
Remarque : une requête HTTP en clair n'est traitée que lorsqu'elle parvient à Chute par son proxy HTTP ; le HTTP en clair qui arrive par l'interface TUN est transmis tel quel. Chute Android fait passer tout le trafic par TUN, sauf si Proxy HTTP système est activé dans les Réglages, ce qui fournit aux apps le proxy HTTP de Chute (Android 10 et ultérieur ; désactivé par défaut). Une requête HTTPS n'est traitée que lorsque son hôte est déchiffré par MitM.
Exemple :
[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
La règle de réécriture comporte 3 parties : l'expression régulière, le remplacement et le type. Les parties sont séparées par des blancs, et le premier mot qui commence par #, ; ou // ouvre un commentaire qui s'étend jusqu'à la fin de la ligne ; cette section ne reconnaît pas les guillemets. Voir Commentaire.
Pour les types de rejet (
reject,reject-200,reject-img,reject-dict,reject-array,reject-tinygif), une forme abrégée à deux jetons<pattern> rejectsans l'espace réservé_est également acceptée. La forme abrégée accepte aussireject-dropetreject-no-dropde Shadowrocket, tous deux traités commereject, ainsi quereject-video, traité commereject-200; ces trois-là ne sont acceptés que dans la forme abrégée, et non comme type d'une ligne à trois jetons. Une ligne à deux jetons dont le second n'est pas un mot-clé de rejet est lue comme une réécriture en mode header vers cette URL :^http://a\.com http://b.coméquivaut à^http://a\.com http://b.com header. Attention à l'orthographe des mots-clés de rejet —reject200n'en est pas un, si bien que^http://ad\.com reject200est lu comme une réécriture en mode header versreject200. Ce remplacement n'étant ni une URL absolue ni un chemin absolu, la réécriture est refusée au moment de la requête, avec un avertissement dans le journal, et la requête part inchangée : ni rejetée, ni réécrite.Les réponses que Chute génère lui-même — la Réponse simulée, la
responsed'un script, ainsi que les réponses et la page d'erreur de la Réécriture d'URL et des politiques REJECT — suivent HTTP : la réponse à une requête HEAD se limite à l'en-tête, avec le Content-Length qu'obtiendrait un GET, et une réponse de statut 204, 205 ou 304 ne porte ni corps ni Content-Length.
Mode en-tête
Chute modifie l'en-tête de la requête et redirige celle-ci vers un autre hôte si nécessaire. Le client ne remarquera pas cette réécriture. (Ce mode correspond au « Map Remote » de Surge.)
Le champ « Host » de l'en-tête de requête est modifié pour correspondre à la nouvelle URL.
[URL Rewrite]
^http://www\.google\.cn http://www.google.com header
Le remplacement peut aussi prendre une forme limitée au chemin, comme /new/path. Dans ce cas, seule la ligne de requête est réécrite vers le nouveau chemin, et la requête reste envoyée au même hôte. Seul un remplacement qui commence par un schéma suivi de :// est lu comme une URL : un chemin dont la chaîne de requête en contient une, comme /go?to=http://example.com/, reste donc un remplacement limité au chemin.
Lorsque la destination ne peut pas être réécrite sur place — par exemple lors de la réécriture d'une requête HTTP simple vers une URL
https://, d'une requête HTTPS (avec MitM activé) vers une origine différente, ou lorsqu'une requête suivante sur une connexion HTTP simple keep-alive déjà établie correspond à une règle qui nomme un autre hôte — Chute bascule automatiquement sur une réponse 307 de redirection vers la nouvelle URL, au lieu d'une réécriture d'en-tête transparente.
Mode 302
Chute renvoie simplement une réponse de redirection 302. Les requêtes HTTPS peuvent être redirigées si le MitM est activé pour le nom d'hôte.
[URL Rewrite]
^http://amazon\.cn https://z.cn 302
Mode 307
Chute renvoie simplement une réponse de redirection temporaire 307. Les requêtes HTTPS peuvent être redirigées si le MitM est activé pour le nom d'hôte.
[URL Rewrite]
^http://amazon\.cn https://z.cn 307
Mode rejet
Rejette la requête si le motif correspond. Le paramètre de remplacement est ignoré. Renvoie une réponse HTTP 503. Les requêtes HTTPS seront rejetées si le MitM est activé pour le nom d'hôte.
[URL Rewrite]
^http://ad\.com/ad\.png _ reject
Mode reject-200
Rejette la requête avec un statut HTTP 200 OK et un corps de longueur nulle. Utile pour bloquer silencieusement les requêtes de suivi sans déclencher de gestion d'erreur.
[URL Rewrite]
^http://tracker\.com/event _ reject-200
Mode reject-img
Rejette la requête en renvoyant une image GIF blanche de 1x1 (HTTP 200 OK). Utile pour bloquer les images publicitaires sans provoquer d'espaces réservés d'image cassée.
[URL Rewrite]
^http://ad\.com/pixel _ reject-img
Mode reject-dict
Rejette la requête en renvoyant un objet JSON vide {} (HTTP 200 OK). Utile pour bloquer les appels d'API qui attendent une réponse JSON.
[URL Rewrite]
^http://api\.example\.com/block _ reject-dict
Mode reject-array
Rejette la requête en renvoyant un tableau JSON vide [] (HTTP 200 OK). Utile pour bloquer les appels d'API qui attendent une liste.
[URL Rewrite]
^http://api\.example\.com/list _ reject-array
Mode reject-tinygif
Rejette la requête en renvoyant une image GIF 1×1 (HTTP 200 OK) — l'orthographe Surge de la même réponse que reject-img.
[URL Rewrite]
^http://ad\.com/beacon _ reject-tinygif