• 匹配原则

    匹配原则

    whistle的协议比较多,具体参见:协议列表,这些协议的匹配优先级及同时可匹配规则个数遵循以下四个原则:

    1. 相同协议规则的默认优先级从上到下,即前面的规则优先级匹配高于后面,如:

      1. www.test.com 127.0.0.1:9999
      2. www.test.com/xxx 127.0.0.1:8080

      请求 https://www.test.com/xxx/index.html 按从上到下的匹配顺序,只会匹配 www.test.com 127.0.0.1:9999,这个与传统的hosts配置后面优先的顺序相反。

      如果想跟系统hosts匹配顺序一致,可以在界面通过 Rules -> Settings -> Back rules first 修改,但这个规则只对在页面里面配置的规则生效,对插件里面自带的规则及通过@方式内联的远程规则不生效。

    2. 除rule及proxy对应规则除外,可以同时匹配不同协议的规则
      1. www.test.com 127.0.0.1:9999
      2. www.test.com/xxx 127.0.0.1:8080
      3. www.test.com proxy://127.0.0.1:8888
      4. www.test.com/xxx socks://127.0.0.1:1080
      5. www.test.com pac://http://www.pac-server.com/test.pac
      6. www.test.com/xxx http://www.abc.com
      7. www.test.com file:///User/xxx/test
      请求 https://www.test.com/xxx/index.html 按从上到下的匹配顺序,及第二点原则,会匹配以下规则:
      1. www.test.com 127.0.0.1:9999
      2. www.test.com proxy://127.0.0.1:8888
      3. www.test.com pac://http://www.pac-server.com/test.pac
      4. www.test.com/xxx http://www.abc.com

      proxy、http-proxy、https-proxy、socks都属于proxy,html、file等都属于rule,所以这两个对应的协议只能各种匹配其中优先级最高的一个。

    3. 一些属于不同协议,但功能有冲突的规则,如 rule、host、proxy,按常用优先级为 rule > host > proxy,如:
      1. www.test.com 127.0.0.1:9999
      2. www.test.com/xxx 127.0.0.1:8080
      3. www.test.com proxy://127.0.0.1:8888
      4. www.test.com/xxx socks://127.0.0.1:1080
      5. www.test.com file:///User/xxx/test
      6. www.test.com/xxx http://www.abc.com
      上述同时匹配file、host、proxy,但只会执行本地替换file。
    4. 部分相同协议会匹配及合并所有可以匹配的规则,如:
      1. www.test.com 127.0.0.1:9999
      2. www.test.com/xxx 127.0.0.1:8080
      3. www.test.com proxy://127.0.0.1:8888
      4. www.test.com/xxx socks://127.0.0.1:1080
      5. www.test.com pac://http://www.pac-server.com/test.pac
      6. www.test.com/xxx http://www.abc.com
      7. www.test.com file:///User/xxx/test
      8. www.test.com/xxx reqHeaders://{test.json}
      9. www.test.com reqHeaders:///User/xxx/test.json
      10. www.test.com/xxx htmlAppend:///User/xxx/test.html
      11. www.test.com htmlAppend://{test.html}
      12. www.test.com/xxx reqHeaders:///User/xxx/test2.json
      13. www.test.com htmlAppend://{test2.html}
      请求 https://www.test.com/xxx/index.html 会匹配以下规则:
      1. www.test.com 127.0.0.1:9999
      2. www.test.com proxy://127.0.0.1:8888
      3. www.test.com pac://http://www.pac-server.com/test.pac
      4. www.test.com/xxx http://www.abc.com
      5. www.test.com/xxx reqHeaders://{test.json}
      6. www.test.com reqHeaders:///User/xxx/test.json
      7. www.test.com/xxx htmlAppend:///User/xxx/test.html
      8. www.test.com htmlAppend://{test.html}
      9. www.test.com/xxx reqHeaders:///User/xxx/test2.json
      10. www.test.com htmlAppend://{test2.html}
      其中,所有匹配的reqHeaders协议的规则会将其对应的json合并后再合并到请求headers里,而所有匹配htmlAppend的html内容会通过换行符 \n 合并并追加到响应的html内容里面,其它可以合并的协议如下(主要涉及json、注入内容、属性设置对应的协议):
      • ignore
      • enable
      • filter
      • disable
      • plugin
      • delete
      • urlParams
      • params
      • reqHeaders
      • resHeaders
      • reqCors
      • resCors
      • reqCookies
      • resCookies
      • reqReplace
      • urlReplace
      • resReplace
      • resMerge
      • reqBody
      • reqPrepend
      • resPrepend
      • reqAppend
      • resAppend
      • resBody
      • htmlAppend
      • jsAppend
      • cssAppend
      • htmlBody
      • jsBody
      • cssBody
      • htmlPrepend
      • jsPrepend
      • cssPrepend