إعادة كتابة الترويسات
يستطيع Chute إعادة كتابة ترويسات الطلبات والاستجابات قبل توجيهها إلى الخادم أو العميل.
يمكن تطبيق عدة قواعد على طلب واحد.
ملاحظة: لا يُعالَج طلب HTTP العادي إلا حين يصل إلى Chute عبر بروكسي HTTP الخاص به؛ أما HTTP العادي الذي يصل عبر واجهة TUN فيُمرَّر دون أي تعديل. ويرسل Chute Android كل الحركة عبر TUN ما لم يُفعَّل بروكسي HTTP للنظام (System HTTP Proxy) في الإعدادات (Settings)، الذي يسلّم التطبيقات بروكسي HTTP الخاص بـ Chute (على Android 10 وما بعده؛ وهو معطّل افتراضياً). ولا يُعالَج طلب HTTPS إلا حين يُفك تشفير مضيفه عبر MitM.
مثال:
[Header Rewrite]
^http://example\.com.* header-add DNT 1
^http://example\.com.* header-del Cookie
^http://example\.com.* header-replace User-Agent Unknown
^http://example\.com.* header-response-add X-Server rack3
^http://example\.com.* header-response-del X-Powered-By
^http://example\.com.* header-response-replace Server nginx
تتكون قاعدة إعادة الكتابة من 4 أجزاء: تعبير نمطي للرابط، نوع الإجراء، حقل الترويسة، والقيمة. ولا يفتح تعليقاً هنا إلا // في بداية السطر أو بعد مسافة، خارج علامتي الاقتباس المزدوجتين؛ أما # و; فلا يفتحان تعليقاً أبداً، ولذلك يحتفظ header-add X-Color #ff0000 بقيمته. راجع التعليقات.
ملاحظة: يُطابَق التعبير النمطي للرابط في أي موضع من رابط الطلب الكامل، وفي مساره وحده أيضاً، كما في إعادة كتابة الرابط:
^https://example\.comيغطي بالفعل كل مسار وسلسلة استعلام على ذلك المضيف، لذا لا حاجة إلى.*في النهاية، و^/apiيطابق كل طلب يبدأ مساره بـ/api. ويبدأ الرابط الكامل للطلب المفكوك تشفيره بـhttps://، لذا لا يطابقه نمط^http://أبداً. يحتفظ النمط بحالة أحرفه، فتبقى\Sو\Dو\Wو\Bعلى معناها؛ أما المطابقة نفسها فلا تميّز بين الأحرف الكبيرة والصغيرة.
ترويسات الطلب مقابل ترويسات الاستجابة
الإجراءات المسبوقة بـ header- تطبق على ترويسات الطلب (من العميل إلى الخادم). الإجراءات المسبوقة بـ header-response- تطبق على ترويسات الاستجابة (من الخادم إلى العميل).
كما تُقبل بادئة اتجاه اختيارية بأسلوب Surge هي http-request / http-response توضع قبل التعبير النمطي للرابط، مثل http-request ^http://example\.com.* header-replace Accept-Language en-us.
header-add
تعيين حقل ترويسة في ترويسة الطلب إلى القيمة المعطاة. إذا كان حقل الترويسة موجوداً بالفعل، تتم الكتابة فوقه؛ والحقل ذو الأسطر المتعددة لا يبقى له إلا هذا السطر الجديد.
مثال:
[Header Rewrite]
^http://example\.com.* header-add DNT 1
Before:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
After:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 1
header-del
حذف حقل ترويسة من ترويسة الطلب، بكل أسطره إن كانت له عدة أسطر.
مثال:
[Header Rewrite]
^http://example\.com.* header-del DNT
Before:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 1
After:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
header-replace
استبدال قيمة ترويسة في ترويسة الطلب. إذا كان حقل الترويسة غير موجود، لا يحدث شيء. والحقل ذو الأسطر المتعددة لا يبقى له إلا سطر واحد يحمل القيمة الجديدة.
مثال:
[Header Rewrite]
^http://example\.com.* header-replace DNT 1
Before:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 0
After:
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Accept-Language: en-us
Accept-Encoding: gzip, deflate
DNT: 1
ملاحظة:
header-replaceيعمل فقط عندما يكون حقل الترويسة موجوداً بالفعل. لتعيين حقل ترويسة بغض النظر عن وجوده، استخدمheader-add— فهو يكتب فوق أي حقل موجود بالاسم نفسه، لذا لا حاجة للجمع بينheader-delوheader-add.
header-replace-regex
يعيد كتابة جزء من قيمة ترويسة موجودة باستخدام تعبير نمطي. تأخذ القاعدة حقل الترويسة، ثم تعبيراً نمطياً يُطبَّق على قيمته، ثم الاستبدال الذي يمكنه الإشارة إلى مجموعات الالتقاط بـ $1 و$2. لا يحدث شيء إذا لم يكن حقل الترويسة موجوداً. ضع التعبير النمطي أو الاستبدال بين علامتي اقتباس مزدوجتين إذا احتوى على مسافات؛ و"" استبدال فارغ.
مثال:
[Header Rewrite]
^https://example\.com header-replace-regex User-Agent "Chrome/[0-9.]+" Chrome/120.0.0.0
^https://example\.com header-response-replace-regex Set-Cookie "; Secure" ""
التعبير النمطي المطبّق على قيمة الترويسة حساس لحالة الأحرف. والحقل ذو الأسطر المتعددة، مثل أسطر Set-Cookie في الاستجابة، يُعاد كتابة كل سطر منه على حدة، وتُحفظ كل أسطره. وكما في الإجراءات الأخرى، يعمل header-response-replace-regex (أو البادئة http-response) على ترويسات الاستجابة.
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.