การตอบกลับจำลอง
Chute สามารถส่งคืนข้อมูลจำลองสำหรับคำขอ HTTP/HTTPS ที่ตรงกันได้ สำหรับสตรีม HTTP/2 ที่ถูกถอดรหัส การตอบกลับจำลองจะถูกตอบในเครื่องโดยไม่ส่งต่อคำขอ ส่วนคำขอ HTTP/1.1 (ทั้งการพร็อกซีแบบธรรมดาและ MitM HTTP/1.1) คำขอจะยังคงถูกส่งไปยังเซิร์ฟเวอร์จริง และการตอบกลับจริงจะถูกแทนที่ด้วยข้อมูลจำลองก่อนที่จะถึงไคลเอนต์ สิ่งนี้มีประโยชน์สำหรับการทดสอบ การพัฒนา หรือการบล็อกเนื้อหาที่ไม่ต้องการด้วยการตอบกลับที่กำหนดเอง
กฎการตอบกลับจำลองถูกกำหนดในส่วน [Map Local]
จะมีเพียงกฎการตอบกลับจำลองเดียวเท่านั้นที่ถูกใช้ต่อคำขอ — กฎแรกที่มีรูปแบบ URL ตรงกัน
รูปแบบ Map Local
สำหรับการให้บริการการตอบกลับจำลองจากไฟล์ในเครื่อง ข้อความในบรรทัด หรือเนื้อหาที่เข้ารหัส base64 พร้อมรหัสสถานะและส่วนหัวที่เลือกได้:
[Map Local]
^https://example\.com/api.* data="/path/to/mock-response.json"
^https://example\.com/page.* data="/path/to/page.html" header="SGVhZGVyOiBWYWx1ZQ=="
^https://example\.com/pixel.* base64="R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
^https://example\.com/api/v2.* data-type=text data="rate limited" status-code=429 header="Content-Type: text/plain|Retry-After: 30"
^https://example\.com/beacon.* data-type=tiny-gif
หมายเหตุ: นิพจน์ปกติจะจับคู่ที่ตำแหน่งใดก็ได้ใน URL คำขอแบบเต็ม —
https://…เมื่อถอดรหัสแล้ว และhttp://…เมื่อ Chute ทำหน้าที่เป็นพร็อกซี HTTP ธรรมดา — ดังนั้น^https://example\.comจึงครอบคลุมทุกพาธและ query string ของโฮสต์นั้นอยู่แล้ว และไม่ต้องลงท้ายด้วย.*นิพจน์ไม่เคยจับคู่กับพาธเพียงอย่างเดียว ดังนั้นรูปแบบอย่าง^/apiจะไม่ตรงกัน รูปแบบจะคงตัวพิมพ์เล็กใหญ่ไว้ ดังนั้น\S,\D,\Wและ\Bจะมีความหมายตามที่เขียน ส่วนการจับคู่เองไม่สนใจตัวพิมพ์เล็กใหญ่
# หรือ // ที่อยู่ต้นบรรทัดหรือหลังช่องว่างจะเปิดหมายเหตุที่ยาวไปจนสุดบรรทัด เว้นแต่จะอยู่ในเครื่องหมายคำพูดคู่ ส่วน ; ไม่เคยเปิดหมายเหตุ ดูหมายเหตุ
พารามิเตอร์ Map Local
| พารามิเตอร์ | คำอธิบาย | |||
|---|---|---|---|---|
data="/path/to/file" |
พาธไฟล์เพื่อให้บริการเป็นเนื้อหาการตอบกลับ ไฟล์ถูกอ่านในเวลาคำขอ หรือเมื่อใช้คู่กับ data-type จะเป็นเนื้อหานั้นเอง (ดูด้านล่าง) |
|||
| `data-type=file\ | text\ | base64\ | tiny-gif` | วิธีอ่าน data=: file คือพาธ (ค่าเริ่มต้น); text คือค่านั้นเป็นเนื้อหา; base64 คือถอดรหัส base64 จากค่า; tiny-gif คือ GIF ขนาด 1×1 ในตัวที่ไม่ต้องใช้ data= (ส่งเป็น image/gif เว้นแต่ header= จะกำหนด Content-Type) |
base64="<encoded>" |
เนื้อหาการตอบกลับที่เข้ารหัส base64 (เหมือนกับ data-type=base64) |
|||
status-code=<code> |
รหัสสถานะของการตอบกลับจำลอง 200–599 ค่าเริ่มต้น 200 รหัสที่อยู่นอกช่วงนี้ทำให้ทั้งบรรทัดใช้ไม่ได้ และจะถูกรายงานเป็นข้อผิดพลาดของการกำหนดค่า |
|||
| `header="Key: value\ | Key2: value2"` | ส่วนหัวการตอบกลับที่กำหนดเอง แต่ละคู่คั่นด้วย `\ | และแต่ละคู่จะแยกที่เครื่องหมายทวิภาคตัวแรก ค่าจึงมีเครื่องหมายทวิภาคอยู่ภายในได้ (เช่น URL) รูปแบบ base64 แบบเดิม (บรรทัดKey:Value\n` ที่เข้ารหัส base64) ยังใช้ได้ |
กฎต้องมีเนื้อหา:
data=(ไฟล์ หรือข้อความ/base64 เมื่อใช้คู่กับdata-type),base64=หรือdata-type=tiny-gifการใช้data-type=textโดยไม่มีdata=จะได้เนื้อหาว่าง กฎที่สร้างเนื้อหาไม่ได้ (ไม่มีพารามิเตอร์เนื้อหา หรืออ่านไฟล์ไม่ได้) จะไม่ตอบกลับ: คำขอจะไปยังเซิร์ฟเวอร์ตามปกติ และจะไม่ลองกฎการตอบกลับจำลองถัดไปหมายเหตุ: ในทั้งสองรูปแบบ ส่วนหัวแต่ละรายการจะแยกที่เครื่องหมายทวิภาคตัวแรก และตัดช่องว่างรอบชื่อและค่าออก บรรทัดที่ไม่มีเครื่องหมายทวิภาคจะถูกข้าม
คำตอบที่ Chute สร้างเอง — Map Local,
responseของสคริปต์ รวมถึงคำตอบและหน้าข้อผิดพลาดของ URL Rewrite และนโยบาย REJECT — เป็นไปตาม HTTP: คำตอบต่อคำขอ HEAD มีเพียงส่วนหัว โดยมี Content-Length เท่ากับที่คำขอ GET จะได้ และคำตอบที่มีสถานะ 204, 205 หรือ 304 จะไม่มีทั้งเนื้อหาและ Content-Length
ตัวแปรเทมเพลต
เมื่อใช้ data= หรือ base64= เนื้อหาการตอบกลับรองรับการแทนที่ตัวแปรเทมเพลต:
| ตัวแปร | แทนที่ด้วย |
|---|---|
{{url}} |
URL คำขอแบบเต็มตามที่กฎมองเห็น |
{{host}} |
ชื่อโฮสต์ของคำขอ |
{{path}} |
เส้นทาง URL สัมพัทธ์ |
{{method}} |
เมธอด HTTP |
{{ua}} |
ค่าส่วนหัว User-Agent |
ตัวอย่างไฟล์ตอบกลับจำลอง (response.json):
{
"requested_url": "{{ "{{url}}" }}",
"host": "{{ "{{host}}" }}",
"method": "{{ "{{method}}" }}"
}
หมายเหตุ: สำหรับคำขอ HTTPS ต้องเปิดใช้งานการถอดรหัส MitM สำหรับชื่อโฮสต์ที่ตรงกัน กฎการตอบกลับจำลองสำหรับทราฟฟิก HTTPS ที่ไม่มี MitM จะถูกละเว้น คำขอ HTTP ธรรมดาจะได้รับการตอบกลับก็ต่อเมื่อเข้ามาถึง Chute ผ่านพร็อกซี HTTP ของ Chute เท่านั้น ส่วน HTTP ธรรมดาที่เข้ามาทางอินเทอร์เฟซ TUN จะถูกส่งต่อไปโดยไม่มีการแก้ไขใด ๆ Chute Android ส่งทราฟฟิกทั้งหมดผ่าน TUN เว้นแต่จะเปิด พร็อกซี HTTP ของระบบ ในการตั้งค่า ซึ่งจะมอบพร็อกซี HTTP ของ Chute ให้แอปต่าง ๆ ใช้ (Android 10 ขึ้นไป และปิดอยู่โดยค่าเริ่มต้น)
หมายเหตุ: ไฟล์ที่
data=ชี้ไปถูกอ่านโดยอุปกรณ์ที่รัน Chute ณ เวลาที่มีคำขอ เมื่อคุณเพิ่มกฎการตอบกลับจำลองจาก Chute Dashboard ไปยัง iPhone เส้นทางบน Mac ของคุณไม่มีความหมายกับโทรศัพท์ — ใส่เนื้อหาแบบอินไลน์ด้วยbase64=แทน หรือให้บริการไฟล์จาก URL แล้วใช้ URL Rewrite
หน้านี้เป็นฉบับแปลจากเวอร์ชันภาษาอังกฤษ หากเนื้อหาไม่ตรงกัน ให้ยึดเวอร์ชันภาษาอังกฤษเป็นหลัก