条件描述的是访客本身,而不是一次猜测
每条规则都是一组以「与」相连的条件,第一条命中的规则决定结果。这些条件正是你在实际判断时会用到的那些:访客位于哪个国家、地区或城市;他来自哪个网络,按自治系统号识别;这个网络是数据中心、商业 VPN、公共代理、TOR 出口节点还是网页匿名器;访客分类器对他得出了什么结论、给了多低的评分;自称的爬虫是不是真的;设备、语言、来源页面、user agent 匹配模式、是否带有营销活动标记、当地时段、星期几,以及这是首次访问还是再次访问。
其中两项值得单独说一句,因为竞品恰恰给不了。网络类型来自一份按地址段编排的代理数据库,而不是一份 user agent 黑名单,所以一个自称 Chrome 的抓取程序照样会被认出是数据中心。而「已验证爬虫」是对地址的核验,不是对名字的核验:一个从家庭宽带发来、自称 Googlebot 的请求并不是 Googlebot,规则引擎分得清这个区别。
条件是三值的,而且是刻意为之。一个条件可以成立、不成立,也可以因为缺数据而无法回答——「无法回答」永远不算命中。取反只会翻转一个确定的答案,因此写成「除德国以外的所有人」的规则,不会在那些国家无法解析的访客身上悄悄触发。
- 来自分类器的访客类型、真伪校验与质量评分
- 网络类型:数据中心、VPN、公共代理、TOR、网页代理
- 国家、地区、城市、自治系统号、地址或子网
- 设备、语言、来源、user agent 匹配模式、营销活动标记
- 当地时段窗口、星期几、首次访问与再次访问
- 可复用的地址清单——一份清单,被多条规则引用
五种处置结果,没有一种是死胡同
命中的规则可以放行这次访问、仅仅记下它命中过;以 404 或 410 把链接返回为不可用;把这位访客送往另一个目标地址;展示一张带你品牌、写着你自己文案的占位页面;也可以只把这次访问标记为可疑,而不改变它的去向。
「放行并记录」这个动作之所以存在,是因为一个你无法审计的过滤器,就是一个你无法信任的过滤器。每一次命中都会连同规则标识符和所采取的动作写进点击事件,于是「已过滤」这项拆分回答的是「这条规则拦下了多少流量,拦下的是不是该拦的流量」——即使规则后来被你改过或删掉也一样,因为动作与标识符是一起存下来的。
用 404 拦截时,返回的刻意就是那张普通的找不到页面。被拦截的链接必须与一条从未存在过的链接毫无区别:任何别的做法,都等于告诉那个正在试探你链接的人,他找到了值得继续试探的东西。
给单条链接的规则,给整个工作区的规则
多数策略针对的都不是某一条链接。工作区级别的规则集作用于该客户名下的每一条链接,并在这条链接自己的规则之后判断,因此一条链接可以在一条全局禁令之上带着一个例外:工作区层面「关闭一切来自数据中心的流量」,而在被监控盯着的那一条链接上「放我们的监控通过」。任意一条链接也可以完全不套用这份共享规则集。
规则正式生效之前,你可以拿一个假想访客去跑一遍——国家、设备、网络类型、时间——看清楚究竟是哪条规则触发、访客最终落在哪里。这个预览不是另写一遍实现:它调用的就是 edge 上的 worker 调用的同一个纯函数,还有一个端到端测试会把它给出的答案,与一次真实跳转返回的 Location 头做比对。
一条规则的开销是设计约束,而不是事后补救
过滤发生在通往跳转的那条路径上,而这恰恰是毫秒能被人真切感知到的唯一位置。所以引擎只索取这条链接的规则真正需要的数据:一个国家条件触发一次地理查询,一个代理类型条件加载地址段集合,一个「已验证爬虫」条件读取一条缓存记录。而一条没有规则的链接,一次额外读取都不会发生——这一点由一个带调用计数器的测试来断言,而不是靠祈祷。
规则确实取到的那些数据,会交给组装点击事件的后台任务,因此同一次查询绝不会付两遍代价。
常见问题
过滤会让我的跳转变慢吗?
没有规则的链接完全不受影响:一次额外查询都不会发生。有规则的链接只取它的条件所需要的东西,而这些查询跑在专为 edge 构建的数据结构上,而不是一个远端数据库上。规则判断本身,是在已经取到的值之上运行的一个纯函数。
被我拦掉的流量会怎样——会从报表里消失吗?
不会。被拦截的访问照样作为点击事件记录下来,带着规则标识符和动作,并出现在「已过滤」这项拆分里。访客拿到的是 404、410 或者你的占位页面;你拿到的是过滤器确实在起作用的证据。
可以按 IP 地址过滤吗?
可以,既能按单个地址,也能按子网,一份清单最多一千条。清单可以复用:把「办公网络」定义一次,想让多少条规则引用它都行。跳转服务在请求时从不去取清单——保存时清单就已经展开进这条链接的缓存配置里了。
这和机器人识别是一回事吗?
机器人识别只是其中一路输入。分类器判断这是哪一类访客;流量规则决定拿它怎么办。你可以只拦数据中心,同时放行已验证的搜索引擎爬虫;也可以把低质量流量导向占位页面,而不是干脆拦死。