URL 재작성
Chute는 다양한 방법으로 요청의 URL을 재작성하거나 URL로 특정 요청을 거부할 수 있습니다.
하나의 요청에는 하나의 규칙만 적용될 수 있습니다.
주의: 일반 HTTP 요청은 Chute의 HTTP 프록시를 거쳐 들어올 때만 처리됩니다. TUN 인터페이스를 거쳐 들어오는 일반 HTTP는 손대지 않고 그대로 전달됩니다. Chute Android는 설정에서 시스템 HTTP 프록시를 켜지 않는 한 모든 트래픽을 TUN으로 보냅니다. 이 옵션을 켜면 앱에 Chute의 HTTP 프록시가 주어집니다(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
재작성 규칙은 정규식, 대체 URL 및 유형의 3부분으로 구성됩니다. 각 부분은 공백으로 구분되며, #, ;, //로 시작하는 첫 단어부터 줄 끝까지가 주석이 됩니다. 이 섹션에는 따옴표 처리가 없습니다. 주석을 참고하세요.
거부 유형(
reject,reject-200,reject-img,reject-dict,reject-array,reject-tinygif)의 경우,_자리 표시자 없이<pattern> reject형태의 2토큰 축약형도 허용됩니다. 축약형은 Shadowrocket의reject-drop과reject-no-drop(둘 다reject로 응답)과reject-video(reject-200으로 응답)도 받아들입니다. 이 세 가지는 축약형에서만 허용되며, 3토큰 줄의 유형으로는 쓸 수 없습니다. 두 번째 토큰이 reject 키워드가 아닌 2토큰 줄은 그 URL로의 header 모드 재작성으로 읽힙니다:^http://a\.com http://b.com은^http://a\.com http://b.com header와 같습니다. reject 키워드의 철자에 유의하세요 —reject200은 키워드가 아니므로^http://ad\.com reject200은reject200으로의 header 모드 재작성으로 읽힙니다. 그 대체 값은 절대 URL도 절대 경로도 아니므로 요청 시점에 재작성이 로그의 경고와 함께 거부되고 요청은 그대로 전달됩니다. 거부되지도, 재작성되지도 않는 셈입니다.Chute가 직접 만드는 응답 — Map Local, 스크립트의
response, URL 재작성과 REJECT 계열 정책의 응답과 오류 페이지 — 은 HTTP를 따릅니다: HEAD 요청에 대한 응답은 헤더뿐이며 Content-Length는 GET일 때와 같고, 상태가 204, 205 또는 304인 응답에는 본문도 Content-Length도 없습니다.
헤더 모드
Chute는 요청 헤더를 수정하고 필요한 경우 요청을 다른 호스트로 리디렉션합니다. 클라이언트는 이 재작성 작업을 감지하지 못합니다. (이 모드는 Surge의 "Map Remote"에 해당합니다.)
요청 헤더의 "Host" 필드는 새 URL과 일치하도록 수정됩니다.
[URL Rewrite]
^http://www\.google\.cn http://www.google.com header
대체 URL은 /new/path와 같은 경로 전용 형태일 수도 있습니다. 이 경우 요청 줄만 새 경로로 재작성되며, 요청은 여전히 동일한 호스트로 전송됩니다. 스킴과 ://로 시작하는 대체 값만 URL로 읽히므로, /go?to=http://example.com/처럼 쿼리 문자열에 URL을 담은 경로도 여전히 경로 전용 대체입니다.
대상을 제자리에서 재작성할 수 없는 경우 — 예를 들어 일반 HTTP 요청을
https://URL로 재작성하거나, (MitM이 활성화된) HTTPS 요청을 다른 출처(origin)로 재작성하거나, 이미 맺어진 일반 HTTP keep-alive 연결의 후속 요청이 다른 호스트를 지정한 규칙에 일치하는 경우 — Chute는 투명한 헤더 재작성 대신 클라이언트에 새 URL로의 307 리디렉션으로 응답하는 방식으로 자동 폴백합니다.
302 모드
Chute는 단순히 302 리디렉션 응답을 반환합니다. 호스트명에 대한 MitM이 활성화된 경우 HTTPS 요청도 리디렉션할 수 있습니다.
[URL Rewrite]
^http://amazon\.cn https://z.cn 302
307 모드
Chute는 단순히 307 임시 리디렉션 응답을 반환합니다. 호스트명에 대한 MitM이 활성화된 경우 HTTPS 요청도 리디렉션할 수 있습니다.
[URL Rewrite]
^http://amazon\.cn https://z.cn 307
거부 모드
패턴이 일치하면 요청을 거부합니다. 대체 매개변수는 무시됩니다. HTTP 503 응답을 반환합니다. 호스트명에 대한 MitM이 활성화된 경우 HTTPS 요청도 거부됩니다.
[URL Rewrite]
^http://ad\.com/ad\.png _ reject
Reject-200 모드
HTTP 200 OK 상태와 길이가 0인 본문으로 요청을 거부합니다. 오류 처리를 트리거하지 않고 추적 요청을 조용히 차단하는 데 유용합니다.
[URL Rewrite]
^http://tracker\.com/event _ reject-200
Reject-Img 모드
1x1 흰색 GIF 이미지(HTTP 200 OK)를 반환하여 요청을 거부합니다. 깨진 이미지 자리 표시자를 유발하지 않고 광고 이미지를 차단하는 데 유용합니다.
[URL Rewrite]
^http://ad\.com/pixel _ reject-img
Reject-Dict 모드
빈 JSON 객체 {}(HTTP 200 OK)를 반환하여 요청을 거부합니다. JSON 응답을 기대하는 API 호출을 차단하는 데 유용합니다.
[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 모드
1×1 GIF 이미지(HTTP 200 OK)를 반환하여 요청을 거부합니다. reject-img와 같은 응답을 Surge식으로 쓴 것입니다.
[URL Rewrite]
^http://ad\.com/beacon _ reject-tinygif
이 페이지는 영어판의 번역본입니다. 내용이 다를 경우 영어판이 우선합니다.