Surge 可以对被接管的网络请求和响应进行修改,修改方式主要分为 Rewrite 和脚本,Rewrite 功能不如脚本灵活强大,但执行开销远低于脚本,所以一般简单的需求建议用 Rewrite 完成。
Rewrite(重写)功能用于 URL 重定向、修改请求 Header,或者用本地文件映射模拟服务器的 API 请求返回静态数据。
该功能只能对 HTTP 请求生效,使用 MITM 解密后也可用于 HTTPS,Raw TCP 请求会忽略该功能。
URL 重定向是指将客户端发出的请求的 URL 重定向到另一个 URL,主要有三种模式,分别为 header、302(307)以及 reject 模式。语法为:正则表达式替代内容模式
Surge 接收到请求后,会直接修改请求的 URL 以及请求头的 HOST 字段来实现的重定向。
这种重定向不是客户端自己完成的,所以客户端是察觉不到的,例如浏览器的某一请求命中了该重定向,即使重定向完成了浏览器地址栏还是会显示旧的 URL。
[URL Rewrite]
^http://www\\.google\\.cn <http://www.google.com> header
Surge 接收到请求后,会直接给客户端返回一个 302(307)响应,客户端根据响应头的 Location 字段自行进行重定向请求,所以和 header 模式不同,客户端是知道这次重定向的。
302 和 307 模式基本一样,但 302 对一个 POST 请求可能会重定向为 GET 请求,所以对 POST 请求的重定向一般用 307 模式。
[URL Rewrite]
^http://www\\.google\\.cn <http://www.google.com> 302
Surge 接收到请求后,会直接给客户端返回一个「503 服务不可用」的响应,基本和内置的 REJECT 策略一致。
[URL Rewrite]
^http://www\\.google\\.cn - reject