URL Rewrite
Chute สามารถเขียน URL ของคำขอใหม่ด้วยวิธีการต่าง ๆ หรือปฏิเสธบางคำขอตาม URL
สามารถใช้กฎเดียวเท่านั้นต่อหนึ่งคำขอ
หมายเหตุ: คำขอ HTTP ธรรมดาจะถูกประมวลผลก็ต่อเมื่อเข้ามาถึง Chute ผ่านพร็อกซี HTTP ของ Chute เท่านั้น ส่วน 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 ส่วน: นิพจน์ปกติ, การแทนที่ และประเภท ส่วนเหล่านี้คั่นกันด้วยช่องว่าง และคำแรกที่ขึ้นต้นด้วย #, ; หรือ // จะเปิดหมายเหตุที่ยาวไปจนสุดบรรทัด ในส่วน URL Rewrite ไม่มีเครื่องหมายคำพูด ดูหมายเหตุ
สำหรับประเภท 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 Rewrite และนโยบาย 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 ได้ด้วย ในกรณีนั้นจะมีเพียงบรรทัดคำขอเท่านั้นที่ถูกเขียนใหม่เป็นพาธใหม่ และคำขอจะยังคงถูกส่งไปยังโฮสต์เดิม การแทนที่จะถูกอ่านเป็น URL ก็ต่อเมื่อขึ้นต้นด้วย scheme ตามด้วย :// เท่านั้น ดังนั้นพาธที่มี URL อยู่ใน query string เช่น /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
หน้านี้เป็นฉบับแปลจากเวอร์ชันภาษาอังกฤษ หากเนื้อหาไม่ตรงกัน ให้ยึดเวอร์ชันภาษาอังกฤษเป็นหลัก