[{"data":1,"prerenderedAt":996},["ShallowReactive",2],{"blog-server-side-vs-client-side-cloaking-zh-zh-CN":3},{"id":4,"title":5,"excerpt":6,"content":7,"coverImage":959,"meta":969,"status":972,"slug":973,"author":974,"category":985,"publishDate":990,"featured":39,"updatedAt":991,"createdAt":992,"contentHtml":993,"previewUrl":994,"localeSlugs":995},101,"服务端斗篷 vs 客户端斗篷：工程师视角技术深度对比与落地指南","从协议层到 DOM 层完整剖析服务端与客户端斗篷的实现路径、各自的代表性代码形态，解释现代审核管线为什么能稳定穿透两类方案，并给出工程师真正能落地的可审计智能落地页参考架构。",{"root":8},{"type":9,"format":10,"indent":11,"version":12,"direction":13,"children":14},"root","",0,1,"ltr",[15,31,47,53,57,80,84,88,93,118,122,126,130,134,138,142,145,149,153,157,161,165,189,193,197,201,220,224,228,232,236,240,272,276,280,288,292,296,308,312,316,320,323,327,331,363,367,371,375,378,413,416,419,422,425,452,455,458,461,464,499,502,505,508,511,538,541,544,548,573,582,587,592,597,601,605,811,815,819,863,891,895,899,903,907,911,915,919,923,927,931,935,939,951,955],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":17},"paragraph",[18,22,25,27,29],{"type":19,"text":20,"format":11,"detail":11,"mode":21,"style":10,"version":12},"text","工程师接手「流量差异化」需求，眼前常是三种代码之一：","normal",{"type":19,"text":23,"format":24,"detail":11,"mode":21,"style":10,"version":12},"User-Agent",16,{"type":19,"text":26,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 上分支的 Nginx、加载后改写 ",{"type":19,"text":28,"format":24,"detail":11,"mode":21,"style":10,"version":12},"innerHTML",{"type":19,"text":30,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 的 JS，或两者兼具的 Cloudflare Worker。团队叫它斗篷，平台叫它违规。本文从工程视角拆解协议层和 DOM 层发生了什么、检测为什么领先、可审计替代架构长什么样。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":32},[33,35,45],{"type":19,"text":34,"format":11,"detail":11,"mode":21,"style":10,"version":12},"业务和政策全景先看支柱文章 ",{"type":36,"fields":37,"format":10,"indent":11,"version":41,"direction":13,"children":42},"link",{"url":38,"newTab":39,"linkType":40},"/zh-CN/resources/blog/what-is-website-cloaking-zh",false,"custom",3,[43],{"type":19,"text":44,"format":11,"detail":11,"mode":21,"style":10,"version":12},"网站斗篷",{"type":19,"text":46,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，本文专注系统侧。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":50},"heading","h2",[51],{"type":19,"text":52,"format":11,"detail":11,"mode":21,"style":10,"version":12},"协议层上「斗篷」的真实含义",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":54},[55],{"type":19,"text":56,"format":11,"detail":11,"mode":21,"style":10,"version":12},"无斗篷的站点里，爬虫和真实用户的响应在结构和内容上对等。带斗篷的站点会基于请求方属性让响应分叉，且分叉的目的是欺骗审核者而非合理 UX。经典实现两类：",{"type":58,"listType":59,"start":12,"tag":60,"format":10,"indent":11,"version":12,"direction":13,"children":61},"list","bullet","ul",[62,71],{"type":63,"value":12,"format":10,"indent":11,"version":12,"direction":13,"children":64},"listitem",[65],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":66},[67,69],{"type":19,"text":68,"format":12,"detail":11,"mode":21,"style":10,"version":12},"服务端斗篷",{"type":19,"text":70,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：分叉发生在 HTML 离开源站（或边缘）之前，机器人和真人收到的字节不同。",{"type":63,"value":72,"format":10,"indent":11,"version":12,"direction":13,"children":73},2,[74],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":75},[76,78],{"type":19,"text":77,"format":12,"detail":11,"mode":21,"style":10,"version":12},"客户端斗篷",{"type":19,"text":79,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：同一份 HTML 离开源站，JS 根据浏览器侧信号在加载后改写页面。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":81},[82],{"type":19,"text":83,"format":11,"detail":11,"mode":21,"style":10,"version":12},"检测层面的问题归结为同一个：审核者能否复现「真实用户看到的页面」。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":85},[86],{"type":19,"text":87,"format":11,"detail":11,"mode":21,"style":10,"version":12},"服务端斗篷：实现路径",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":90},"h3",[91],{"type":19,"text":92,"format":11,"detail":11,"mode":21,"style":10,"version":12},"HTTP 响应分支",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":94},[95,97,98,100,102,104,106,107,109,111,113,114,116],{"type":19,"text":96,"format":11,"detail":11,"mode":21,"style":10,"version":12},"反向代理或应用层中间件根据请求头返回两份不同 HTML。常见分支信号：",{"type":19,"text":23,"format":24,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":99,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 子串匹配（",{"type":19,"text":101,"format":24,"detail":11,"mode":21,"style":10,"version":12},"Googlebot",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},"、",{"type":19,"text":105,"format":24,"detail":11,"mode":21,"style":10,"version":12},"AdsBot-Google",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":108,"format":24,"detail":11,"mode":21,"style":10,"version":12},"facebookexternalhit",{"type":19,"text":110,"format":11,"detail":11,"mode":21,"style":10,"version":12},"）；源 IP 是否落在已知机房段或爬虫公开 IP 列表；",{"type":19,"text":112,"format":24,"detail":11,"mode":21,"style":10,"version":12},"Accept-Language",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":115,"format":24,"detail":11,"mode":21,"style":10,"version":12},"Accept",{"type":19,"text":117,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 头与 Referrer；Geo-IP 和 ASN 查询。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":119},[120],{"type":19,"text":121,"format":11,"detail":11,"mode":21,"style":10,"version":12},"伪 Nginx 配置：",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":123},[124],{"type":19,"text":125,"format":11,"detail":11,"mode":21,"style":10,"version":12},"```",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":127},[128],{"type":19,"text":129,"format":11,"detail":11,"mode":21,"style":10,"version":12},"if ($http_user_agent ~* \"googlebot|adsbot\") {",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":131},[132],{"type":19,"text":133,"format":11,"detail":11,"mode":21,"style":10,"version":12},"rewrite ^ /safe.html last;",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":135},[136],{"type":19,"text":137,"format":11,"detail":11,"mode":21,"style":10,"version":12},"}",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":139},[140],{"type":19,"text":141,"format":11,"detail":11,"mode":21,"style":10,"version":12},"proxy_pass http://money-page-upstream;",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":143},[144],{"type":19,"text":125,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":146},[147],{"type":19,"text":148,"format":11,"detail":11,"mode":21,"style":10,"version":12},"边缘节点分支",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":150},[151],{"type":19,"text":152,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Cloudflare Worker、Lambda@Edge 或 Fastly VCL 在更靠近用户的节点做同样判断，可拿更丰富的信号（TLS 指纹、HTTP/2 帧序、JA3/JA4、Bot Management 评分）。输出仍是两份响应体面向两种受众。",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":154},[155],{"type":19,"text":156,"format":11,"detail":11,"mode":21,"style":10,"version":12},"DNS 层切分",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":158},[159],{"type":19,"text":160,"format":11,"detail":11,"mode":21,"style":10,"version":12},"较少见但存在：split-horizon DNS 或 GeoDNS 把疑似审核者解析到干净源站，其它流量解析到「钱页」源站。两台源站从不同 IP 输出不同内容，纯靠 header 比对很难关联。",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":162},[163],{"type":19,"text":164,"format":11,"detail":11,"mode":21,"style":10,"version":12},"为什么服务端斗篷会被识破",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":166},[167,169,171,173,175,177,179,181,183,185,187],{"type":19,"text":168,"format":11,"detail":11,"mode":21,"style":10,"version":12},"现代审核管线包含：(1) ",{"type":19,"text":170,"format":12,"detail":11,"mode":21,"style":10,"version":12},"住宅与移动代理拉取",{"type":19,"text":172,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，从像真实用户的 IP 请求页面，绕开 ASN 与机房 IP 判别；(2) ",{"type":19,"text":174,"format":12,"detail":11,"mode":21,"style":10,"version":12},"多次抓取 + 身份轮换",{"type":19,"text":176,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，同一 URL 用不同 UA、头、TLS 指纹、referrer 抓多次再 diff，差异本身就是信号；(3) ",{"type":19,"text":178,"format":12,"detail":11,"mode":21,"style":10,"version":12},"从广告点击回放",{"type":19,"text":180,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，平台从干净基础设施完整回放点击链路（带全部追踪参数），直接打死基于 referrer 的分支；(4) ",{"type":19,"text":182,"format":12,"detail":11,"mode":21,"style":10,"version":12},"入站方向 TLS / HTTP/2 指纹伪装",{"type":19,"text":184,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，审核者在网络层已不再「像机器人」；(5) ",{"type":19,"text":186,"format":12,"detail":11,"mode":21,"style":10,"version":12},"持续复审",{"type":19,"text":188,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，URL 之后被抽样，「先安全后切钱页」会被时间序列 diff 抓住。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":190},[191],{"type":19,"text":192,"format":11,"detail":11,"mode":21,"style":10,"version":12},"这些手段都不需要审核者知道你的分支规则。规则只要产生可观测、和「审核者形态流量」相关的差异，规则本身就暴露了。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":194},[195],{"type":19,"text":196,"format":11,"detail":11,"mode":21,"style":10,"version":12},"客户端斗篷：实现路径",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":198},[199],{"type":19,"text":200,"format":11,"detail":11,"mode":21,"style":10,"version":12},"加载后 DOM 替换",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":202},[203,205,207,209,211,212,214,216,218],{"type":19,"text":204,"format":11,"detail":11,"mode":21,"style":10,"version":12},"源站返回一份温和的 HTML。在 ",{"type":19,"text":206,"format":24,"detail":11,"mode":21,"style":10,"version":12},"DOMContentLoaded",{"type":19,"text":208,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 之后，JavaScript 检查 ",{"type":19,"text":210,"format":24,"detail":11,"mode":21,"style":10,"version":12},"navigator",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":213,"format":24,"detail":11,"mode":21,"style":10,"version":12},"screen",{"type":19,"text":215,"format":11,"detail":11,"mode":21,"style":10,"version":12},"、计时器或远端决策端点，然后改写 ",{"type":19,"text":217,"format":24,"detail":11,"mode":21,"style":10,"version":12},"document.body.innerHTML",{"type":19,"text":219,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，或把「安全块」隐藏、把「真实块」露出来。",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":221},[222],{"type":19,"text":223,"format":11,"detail":11,"mode":21,"style":10,"version":12},"JS 选择内容变体",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":225},[226],{"type":19,"text":227,"format":11,"detail":11,"mode":21,"style":10,"version":12},"变体玩法：页面把两个变体都打包在 DOM 里（或通过 XHR 拉），由一段脚本决定渲染哪份。常被包装成「A/B 测试」或「个性化」，但实际是「审核者 vs 非审核者」的二元决策，不是多变量实验。",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":229},[230],{"type":19,"text":231,"format":11,"detail":11,"mode":21,"style":10,"version":12},"懒水合 / 延迟拉取",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":233},[234],{"type":19,"text":235,"format":11,"detail":11,"mode":21,"style":10,"version":12},"页面服务端渲染出一层安全外壳，再水合 React 或 Vue 树，从 JSON 接口拉「真实」内容，并对客户端做校验。设计者的预设是「自动抓取不会跑 JS、不会水合、看不见真实负载」。",{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":237},[238],{"type":19,"text":239,"format":11,"detail":11,"mode":21,"style":10,"version":12},"为什么客户端斗篷会被识破",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":241},[242,244,246,248,250,252,254,256,258,260,262,264,266,268,270],{"type":19,"text":243,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Headless Chromium 和现代审核爬虫栈全部覆盖：(1) ",{"type":19,"text":245,"format":12,"detail":11,"mode":21,"style":10,"version":12},"默认完整渲染",{"type":19,"text":247,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，截取水合后的 DOM 而不是初始 HTML；(2) ",{"type":19,"text":249,"format":12,"detail":11,"mode":21,"style":10,"version":12},"长 settle 窗口",{"type":19,"text":251,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，等网络空闲、",{"type":19,"text":253,"format":24,"detail":11,"mode":21,"style":10,"version":12},"requestIdleCallback",{"type":19,"text":255,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 和额外定时器后才快照，延迟几秒救不了你；(3) ",{"type":19,"text":257,"format":12,"detail":11,"mode":21,"style":10,"version":12},"DOM mutation 观察",{"type":19,"text":259,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，审核者记录每次 mutation 再和干净运行 diff；(4) ",{"type":19,"text":261,"format":12,"detail":11,"mode":21,"style":10,"version":12},"反指纹强化",{"type":19,"text":263,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，",{"type":19,"text":265,"format":24,"detail":11,"mode":21,"style":10,"version":12},"navigator.webdriver",{"type":19,"text":267,"format":11,"detail":11,"mode":21,"style":10,"version":12},"、缺失 plugin、headless 标记、计时痕迹被系统性抹掉，页面无法稳定识别「这是审核者」；(5) ",{"type":19,"text":269,"format":12,"detail":11,"mode":21,"style":10,"version":12},"XHR / fetch 拦截",{"type":19,"text":271,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，所有出站请求都被记录，按启发式返回不同负载的接口本身就是证据。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":273},[274],{"type":19,"text":275,"format":11,"detail":11,"mode":21,"style":10,"version":12},"DOM 是可观测的。渲染后的页面和审核者看到的不一样，差异就是违规，JavaScript 写得再花哨也救不了。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":277},[278],{"type":19,"text":279,"format":11,"detail":11,"mode":21,"style":10,"version":12},"混合斗篷：叠加无法买到持久性",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":281},[282,284,286],{"type":19,"text":283,"format":11,"detail":11,"mode":21,"style":10,"version":12},"常见演进：服务端规则过滤明显机器人，客户端规则处理边界 case，再加综合两层的「信任分」。代码变复杂，维护成本上升，底层问题没变。检测不找某种具体把戏，而是找「给审核者看的页面」和「给真实流量看的页面」之间任何可观测的分叉。叠加层数越多，泄漏面越大：决策端点响应结构在分桶下不一致；资源 URL 只出现在某变体；DOM 体积、渲染时间、Lighthouse 指标按分支聚类；第三方标签条件加载；",{"type":19,"text":285,"format":24,"detail":11,"mode":21,"style":10,"version":12},"canonical",{"type":19,"text":287,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 与 OpenGraph 在变体间漂移。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":289},[290],{"type":19,"text":291,"format":11,"detail":11,"mode":21,"style":10,"version":12},"把工程时间花在堆混淆上，就没花在合规版本上：用一种你能在审核面前讲清楚的方式给对的用户对的体验。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":293},[294],{"type":19,"text":295,"format":11,"detail":11,"mode":21,"style":10,"version":12},"合理的工程模式：可审计的差异化",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":297},[298,300,306],{"type":19,"text":299,"format":11,"detail":11,"mode":21,"style":10,"version":12},"按上下文区分体验不是问题，让审核者看不懂才是。推荐做法（详见 ",{"type":36,"fields":301,"format":10,"indent":11,"version":41,"direction":13,"children":303},{"url":302,"newTab":39,"linkType":40},"/zh-CN/resources/blog/cloaking-vs-smart-landing-pages-zh",[304],{"type":19,"text":305,"format":11,"detail":11,"mode":21,"style":10,"version":12},"斗篷 vs 智能落地页",{"type":19,"text":307,"format":11,"detail":11,"mode":21,"style":10,"version":12},"）是反过来设计：差异化逻辑、输入、输出默认可审计，变体设计成「单独看每个都合规」「只在合法维度上分叉」（语言、地域、设备、授权、活动）。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":309},[310],{"type":19,"text":311,"format":11,"detail":11,"mode":21,"style":10,"version":12},"四条契约：(1) 每个变体在版本化目录可单独审阅；(2) 每次路由决策连同输入一起被记录；(3) 拿到日志的审核者能回放任意历史响应；(4) 判定永远不含「机器人 vs 真人」分支，决策输入必须对用户有意义（locale、套餐、A/B 分桶），不是对反检测有意义。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":313},[314],{"type":19,"text":315,"format":11,"detail":11,"mode":21,"style":10,"version":12},"参考架构：可审计的流量差异化",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":317},[318],{"type":19,"text":319,"format":11,"detail":11,"mode":21,"style":10,"version":12},"下面是一个最小可行的参考设计，小到一个周末能落地，完整到能扛住平台审核。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":321},[322],{"type":19,"text":125,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":324},[325],{"type":19,"text":326,"format":11,"detail":11,"mode":21,"style":10,"version":12},"+-----------------------------+",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":328},[329],{"type":19,"text":330,"format":11,"detail":11,"mode":21,"style":10,"version":12},"request  -->  |  1. 上下文解析器             |",{"type":332,"direction":333,"format":10,"indent":11,"version":12,"colWidths":334,"children":336},"table",null,[335],840,[337,347,355],{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":339},"tablerow",[340],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":342},"tablecell",[343],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":344},[345],{"type":19,"text":346,"format":11,"detail":11,"mode":21,"style":10,"version":12},"locale / geo / device",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":348},[349],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":350},[351],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":352},[353],{"type":19,"text":354,"format":11,"detail":11,"mode":21,"style":10,"version":12},"campaign / referrer",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":356},[357],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":358},[359],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":360},[361],{"type":19,"text":362,"format":11,"detail":11,"mode":21,"style":10,"version":12},"consent / auth state",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":364},[365],{"type":19,"text":366,"format":11,"detail":11,"mode":21,"style":10,"version":12},"+--------------+--------------+",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":368},[369],{"type":19,"text":370,"format":11,"detail":11,"mode":21,"style":10,"version":12},"                                |",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":372},[373],{"type":19,"text":374,"format":11,"detail":11,"mode":21,"style":10,"version":12},"v",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":376},[377],{"type":19,"text":326,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":332,"direction":333,"format":10,"indent":11,"version":12,"colWidths":379,"children":380},[335],[381,389,397,405],{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":382},[383],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":384},[385],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":386},[387],{"type":19,"text":388,"format":11,"detail":11,"mode":21,"style":10,"version":12},"2. 变体选择器",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":390},[391],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":392},[393],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":394},[395],{"type":19,"text":396,"format":11,"detail":11,"mode":21,"style":10,"version":12},"读取变体目录",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":398},[399],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":400},[401],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":402},[403],{"type":19,"text":404,"format":11,"detail":11,"mode":21,"style":10,"version":12},"应用路由规则",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":406},[407],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":408},[409],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":410},[411],{"type":19,"text":412,"format":11,"detail":11,"mode":21,"style":10,"version":12},"返回 variant_id",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":414},[415],{"type":19,"text":366,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":417},[418],{"type":19,"text":370,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":420},[421],{"type":19,"text":374,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":423},[424],{"type":19,"text":326,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":332,"direction":333,"format":10,"indent":11,"version":12,"colWidths":426,"children":427},[335],[428,436,444],{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":429},[430],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":431},[432],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":433},[434],{"type":19,"text":435,"format":11,"detail":11,"mode":21,"style":10,"version":12},"3. 渲染器",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":437},[438],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":439},[440],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":441},[442],{"type":19,"text":443,"format":11,"detail":11,"mode":21,"style":10,"version":12},"输出 variant_id 对应内容",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":445},[446],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":447},[448],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":449},[450],{"type":19,"text":451,"format":11,"detail":11,"mode":21,"style":10,"version":12},"相同上下文 → 相同字节",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":453},[454],{"type":19,"text":366,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":456},[457],{"type":19,"text":370,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":459},[460],{"type":19,"text":374,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":462},[463],{"type":19,"text":326,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":332,"direction":333,"format":10,"indent":11,"version":12,"colWidths":465,"children":466},[335],[467,475,483,491],{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":468},[469],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":470},[471],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":472},[473],{"type":19,"text":474,"format":11,"detail":11,"mode":21,"style":10,"version":12},"4. 决策日志",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":476},[477],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":478},[479],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":480},[481],{"type":19,"text":482,"format":11,"detail":11,"mode":21,"style":10,"version":12},"context hash",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":484},[485],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":486},[487],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":488},[489],{"type":19,"text":490,"format":11,"detail":11,"mode":21,"style":10,"version":12},"variant_id / version",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":492},[493],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":494},[495],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":496},[497],{"type":19,"text":498,"format":11,"detail":11,"mode":21,"style":10,"version":12},"timestamp / request_id",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":500},[501],{"type":19,"text":366,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":503},[504],{"type":19,"text":370,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":506},[507],{"type":19,"text":374,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":509},[510],{"type":19,"text":326,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":332,"direction":333,"format":10,"indent":11,"version":12,"colWidths":512,"children":513},[335],[514,522,530],{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":515},[516],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":517},[518],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":519},[520],{"type":19,"text":521,"format":11,"detail":11,"mode":21,"style":10,"version":12},"5. 审计接口",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":523},[524],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":525},[526],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":527},[528],{"type":19,"text":529,"format":11,"detail":11,"mode":21,"style":10,"version":12},"/audit?request_id=...",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":531},[532],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":533},[534],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":535},[536],{"type":19,"text":537,"format":11,"detail":11,"mode":21,"style":10,"version":12},"→ 输入 + 变体 + html",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":539},[540],{"type":19,"text":326,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":542},[543],{"type":19,"text":125,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":48,"tag":89,"format":10,"indent":11,"version":12,"direction":13,"children":545},[546],{"type":19,"text":547,"format":11,"detail":11,"mode":21,"style":10,"version":12},"各组件契约",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":549},[550,552,554,556,557,559,560,562,563,565,566,568,569,571],{"type":19,"text":551,"format":12,"detail":11,"mode":21,"style":10,"version":12},"1. 上下文解析器",{"type":19,"text":553,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：从请求到结构化上下文对象的纯函数，输入显式有限（",{"type":19,"text":555,"format":24,"detail":11,"mode":21,"style":10,"version":12},"locale",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":558,"format":24,"detail":11,"mode":21,"style":10,"version":12},"country",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":561,"format":24,"detail":11,"mode":21,"style":10,"version":12},"device_class",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":564,"format":24,"detail":11,"mode":21,"style":10,"version":12},"campaign_id",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":567,"format":24,"detail":11,"mode":21,"style":10,"version":12},"consent_state",{"type":19,"text":103,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":570,"format":24,"detail":11,"mode":21,"style":10,"version":12},"is_authenticated",{"type":19,"text":572,"format":11,"detail":11,"mode":21,"style":10,"version":12},"）。关键：不接受「是不是机器人」作为输入。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":574},[575,576,578,580],{"type":19,"text":388,"format":12,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":577,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：从版本化目录读（如 ",{"type":19,"text":579,"format":24,"detail":11,"mode":21,"style":10,"version":12},"variants/v3/checkout-IN-mobile.html",{"type":19,"text":581,"format":11,"detail":11,"mode":21,"style":10,"version":12},"），按声明式规则做选择。规则是数据不是代码分支，PR 可 review，凭上下文对象可复现。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":583},[584,585],{"type":19,"text":435,"format":12,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":586,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：返回所选变体。相同上下文，任何客户端拿到相同字节。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":588},[589,590],{"type":19,"text":474,"format":12,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":591,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：每请求写一行 hash 后的上下文、variant_id、version、timestamp、稳定 request_id，这就是证据堆。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":593},[594,595],{"type":19,"text":521,"format":12,"detail":11,"mode":21,"style":10,"version":12},{"type":19,"text":596,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：给定 request_id 返回当时输入和渲染出的 HTML，几秒回答「这个用户当时为什么看到这页」。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":598},[599],{"type":19,"text":600,"format":11,"detail":11,"mode":21,"style":10,"version":12},"审核者打 flag 时你不用辩解。把决策日志、变体目录、路由规则甩出去，争议靠证据收尾。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":602},[603],{"type":19,"text":604,"format":11,"detail":11,"mode":21,"style":10,"version":12},"对比：服务端斗篷 vs 客户端斗篷 vs 智能落地页架构",{"type":332,"direction":333,"format":10,"indent":11,"version":12,"colWidths":606,"children":608},[607,607,607,607],210,[609,633,659,684,710,736,761,786],{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":610},[611,617,622,627],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":612},[613],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":614},[615],{"type":19,"text":616,"format":11,"detail":11,"mode":21,"style":10,"version":12},"维度",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":618},[619],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":620},[621],{"type":19,"text":68,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":623},[624],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":625},[626],{"type":19,"text":77,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":12,"children":628},[629],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":630},[631],{"type":19,"text":632,"format":11,"detail":11,"mode":21,"style":10,"version":12},"智能落地页架构",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":634},[635,641,647,653],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":636},[637],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":638},[639],{"type":19,"text":640,"format":11,"detail":11,"mode":21,"style":10,"version":12},"实现面",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":642},[643],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":644},[645],{"type":19,"text":646,"format":11,"detail":11,"mode":21,"style":10,"version":12},"边缘 / 代理 / 源站中间件",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":648},[649],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":650},[651],{"type":19,"text":652,"format":11,"detail":11,"mode":21,"style":10,"version":12},"JS bundle + 决策端点",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":654},[655],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":656},[657],{"type":19,"text":658,"format":11,"detail":11,"mode":21,"style":10,"version":12},"变体目录 + 选择器 + 日志",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":660},[661,667,672,678],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":662},[663],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":664},[665],{"type":19,"text":666,"format":11,"detail":11,"mode":21,"style":10,"version":12},"主要检测手段",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":668},[669],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":670},[671],{"type":19,"text":174,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":673},[674],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":675},[676],{"type":19,"text":677,"format":11,"detail":11,"mode":21,"style":10,"version":12},"Headless 渲染 + DOM diff",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":679},[680],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":681},[682],{"type":19,"text":683,"format":11,"detail":11,"mode":21,"style":10,"version":12},"不需要；差异化本就公开",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":685},[686,692,698,704],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":687},[688],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":689},[690],{"type":19,"text":691,"format":11,"detail":11,"mode":21,"style":10,"version":12},"抗审核能力",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":693},[694],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":695},[696],{"type":19,"text":697,"format":11,"detail":11,"mode":21,"style":10,"version":12},"弱；审核能力持续提升",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":699},[700],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":701},[702],{"type":19,"text":703,"format":11,"detail":11,"mode":21,"style":10,"version":12},"弱；Chromium 回放已是标配",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":705},[706],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":707},[708],{"type":19,"text":709,"format":11,"detail":11,"mode":21,"style":10,"version":12},"强；以可审计性获取通过",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":711},[712,718,724,730],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":713},[714],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":715},[716],{"type":19,"text":717,"format":11,"detail":11,"mode":21,"style":10,"version":12},"长期维护成本",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":719},[720],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":721},[722],{"type":19,"text":723,"format":11,"detail":11,"mode":21,"style":10,"version":12},"上升；每个平台都要追规则",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":725},[726],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":727},[728],{"type":19,"text":729,"format":11,"detail":11,"mode":21,"style":10,"version":12},"上升；指纹猫鼠循环",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":731},[732],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":733},[734],{"type":19,"text":735,"format":11,"detail":11,"mode":21,"style":10,"version":12},"平稳；规则是声明式数据",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":737},[738,744,750,755],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":739},[740],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":741},[742],{"type":19,"text":743,"format":11,"detail":11,"mode":21,"style":10,"version":12},"失效形态",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":745},[746],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":747},[748],{"type":19,"text":749,"format":11,"detail":11,"mode":21,"style":10,"version":12},"账户封停、域名拉黑",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":751},[752],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":753},[754],{"type":19,"text":749,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":756},[757],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":758},[759],{"type":19,"text":760,"format":11,"detail":11,"mode":21,"style":10,"version":12},"变体回滚、无政策风险",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":762},[763,769,775,780],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":764},[765],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":766},[767],{"type":19,"text":768,"format":11,"detail":11,"mode":21,"style":10,"version":12},"合规姿态",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":770},[771],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":772},[773],{"type":19,"text":774,"format":11,"detail":11,"mode":21,"style":10,"version":12},"违反主流广告政策",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":776},[777],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":778},[779],{"type":19,"text":774,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":781},[782],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":783},[784],{"type":19,"text":785,"format":11,"detail":11,"mode":21,"style":10,"version":12},"与平台预期一致",{"type":338,"direction":333,"format":10,"indent":11,"version":12,"children":787},[788,794,800,805],{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":789},[790],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":791},[792],{"type":19,"text":793,"format":11,"detail":11,"mode":21,"style":10,"version":12},"工程 ROI",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":795},[796],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":797},[798],{"type":19,"text":799,"format":11,"detail":11,"mode":21,"style":10,"version":12},"首次封号即转负",{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":801},[802],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":803},[804],{"type":19,"text":799,"format":11,"detail":11,"mode":21,"style":10,"version":12},{"type":341,"direction":333,"format":10,"indent":11,"version":12,"backgroundColor":333,"colSpan":12,"rowSpan":12,"headerState":11,"children":806},[807],{"type":16,"direction":333,"format":10,"indent":11,"version":12,"textFormat":11,"textStyle":10,"children":808},[809],{"type":19,"text":810,"format":11,"detail":11,"mode":21,"style":10,"version":12},"正；可复用于本地化、个性化、实验",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":812},[813],{"type":19,"text":814,"format":11,"detail":11,"mode":21,"style":10,"version":12},"迁移实务",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":816},[817],{"type":19,"text":818,"format":11,"detail":11,"mode":21,"style":10,"version":12},"如果你正在维护一套带斗篷的部署准备迁到上面的架构：",{"type":58,"listType":59,"start":12,"tag":60,"format":10,"indent":11,"version":12,"direction":13,"children":820},[821,829,837,845,854],{"type":63,"value":12,"format":10,"indent":11,"version":12,"direction":13,"children":822},[823],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":824},[825,827],{"type":19,"text":826,"format":12,"detail":11,"mode":21,"style":10,"version":12},"先盘点分叉点",{"type":19,"text":828,"format":11,"detail":11,"mode":21,"style":10,"version":12},"。「机器人版本」省略了什么？为什么？答案常是「审核者会质疑的说法」——本质是产品和文案问题。",{"type":63,"value":72,"format":10,"indent":11,"version":12,"direction":13,"children":830},[831],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":832},[833,835],{"type":19,"text":834,"format":12,"detail":11,"mode":21,"style":10,"version":12},"按对用户有意义的维度切变体",{"type":19,"text":836,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：locale、设备、授权、活动。每个变体必须独立扛过人工审核。",{"type":63,"value":41,"format":10,"indent":11,"version":12,"direction":13,"children":838},[839],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":840},[841,843],{"type":19,"text":842,"format":12,"detail":11,"mode":21,"style":10,"version":12},"决策必须由上下文对象 deterministically 复现",{"type":19,"text":844,"format":11,"detail":11,"mode":21,"style":10,"version":12},"。放不回去就辩不了。",{"type":63,"value":846,"format":10,"indent":11,"version":12,"direction":13,"children":847},4,[848],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":849},[850,852],{"type":19,"text":851,"format":12,"detail":11,"mode":21,"style":10,"version":12},"删除解析器里所有探测类输入",{"type":19,"text":853,"format":11,"detail":11,"mode":21,"style":10,"version":12},"：不要 UA 分类、JA3、「是不是自动化」。解析器不该关心。",{"type":63,"value":855,"format":10,"indent":11,"version":12,"direction":13,"children":856},5,[857],{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":858},[859,861],{"type":19,"text":860,"format":12,"detail":11,"mode":21,"style":10,"version":12},"跑一段影子窗口",{"type":19,"text":862,"format":11,"detail":11,"mode":21,"style":10,"version":12},"。新系统先只记日志不接流量，与旧系统 diff，按变体逐个迁。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":864},[865,867,873,875,881,883,889],{"type":19,"text":866,"format":11,"detail":11,"mode":21,"style":10,"version":12},"TikTok 和 Meta 的审核差异详见 ",{"type":36,"fields":868,"format":10,"indent":11,"version":41,"direction":13,"children":870},{"url":869,"newTab":39,"linkType":40},"/zh-CN/resources/blog/cloaking-for-tiktok-facebook-ads-zh",[871],{"type":19,"text":872,"format":11,"detail":11,"mode":21,"style":10,"version":12},"面向 TikTok 与 Facebook 广告的斗篷",{"type":19,"text":874,"format":11,"detail":11,"mode":21,"style":10,"version":12},"；厂商横评看 ",{"type":36,"fields":876,"format":10,"indent":11,"version":41,"direction":13,"children":878},{"url":877,"newTab":39,"linkType":40},"/zh-CN/resources/blog/cloaking-tools-compared-2026-zh",[879],{"type":19,"text":880,"format":11,"detail":11,"mode":21,"style":10,"version":12},"2026 斗篷工具横评",{"type":19,"text":882,"format":11,"detail":11,"mode":21,"style":10,"version":12},"；智能落地页都救不了的场景看 ",{"type":36,"fields":884,"format":10,"indent":11,"version":41,"direction":13,"children":886},{"url":885,"newTab":39,"linkType":40},"/zh-CN/resources/blog/when-not-to-use-cloaking-zh",[887],{"type":19,"text":888,"format":11,"detail":11,"mode":21,"style":10,"version":12},"什么时候不该用斗篷",{"type":19,"text":890,"format":11,"detail":11,"mode":21,"style":10,"version":12},"。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":892},[893],{"type":19,"text":894,"format":11,"detail":11,"mode":21,"style":10,"version":12},"FAQ",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":896},[897],{"type":19,"text":898,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q1. 服务端斗篷是不是比客户端斗篷更难被检测？",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":900},[901],{"type":19,"text":902,"format":11,"detail":11,"mode":21,"style":10,"version":12},"边际上更难但不持久。服务端斗篷迫使检测方投入住宅代理和指纹轮换，客户端斗篷只要一个 headless 渲染器就破了。大平台两类探针都常态化部署，差距不足以作为规划依据。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":904},[905],{"type":19,"text":906,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q2. 用 TLS 指纹随机化绕审核可行吗？",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":908},[909],{"type":19,"text":910,"format":11,"detail":11,"mode":21,"style":10,"version":12},"你可以让某一类探针变复杂，但平台审核者不是唯一对手。持续复审、点击回放、用户举报都绕开了网络层混淆。半衰期很短。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":912},[913],{"type":19,"text":914,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q3. 服务端渲染（SSR）和服务端斗篷是一回事吗？",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":916},[917],{"type":19,"text":918,"format":11,"detail":11,"mode":21,"style":10,"version":12},"不是。SSR 把同一份 canonical 内容在服务端渲染给所有客户端。服务端斗篷刻意根据请求方渲染不同 canonical 内容。机制重叠，意图相反。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":920},[921],{"type":19,"text":922,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q4. 我们在用 feature flag，算不算斗篷？",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":924},[925],{"type":19,"text":926,"format":11,"detail":11,"mode":21,"style":10,"version":12},"当 flag 取值来源于探测信号（UA、ASN、headless 标记），且最终体验是审核者会拒绝的，那就是斗篷。基于用户属性（套餐、地区、opt-in）并写进审计日志的 feature flag 不是斗篷，是正常产品工程。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":928},[929],{"type":19,"text":930,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q5. 智能落地页架构和「CDN + 边缘规则」有什么区别？",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":932},[933],{"type":19,"text":934,"format":11,"detail":11,"mode":21,"style":10,"version":12},"边缘规则只是实现细节。架构的定义性特征是决策日志和审计接口，不是路由跑在哪层。变体选择器放边缘、放应用层、放 serverless 都行。要紧的是每次决策可复现、每个变体单独合规。",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":936},[937],{"type":19,"text":938,"format":12,"detail":11,"mode":21,"style":10,"version":12},"Q6. 一套斗篷系统快要翻车的最大单点工程信号是什么？",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":940},[941,943,945,947,949],{"type":19,"text":942,"format":11,"detail":11,"mode":21,"style":10,"version":12},"路由层里以探测信号为输入的分支。如果你的代码里有 ",{"type":19,"text":944,"format":24,"detail":11,"mode":21,"style":10,"version":12},"isBot",{"type":19,"text":946,"format":11,"detail":11,"mode":21,"style":10,"version":12}," 或 ",{"type":19,"text":948,"format":24,"detail":11,"mode":21,"style":10,"version":12},"isReviewer",{"type":19,"text":950,"format":11,"detail":11,"mode":21,"style":10,"version":12},"，离下次检测升级就一步距离。删掉这种输入，重新围绕「对用户有意义的维度」设计，整个风险类目就消失了。",{"type":48,"tag":49,"format":10,"indent":11,"version":12,"direction":13,"children":952},[953],{"type":19,"text":954,"format":11,"detail":11,"mode":21,"style":10,"version":12},"收尾",{"type":16,"format":10,"indent":11,"version":12,"direction":13,"children":956},[957],{"type":19,"text":958,"format":11,"detail":11,"mode":21,"style":10,"version":12},"诚实总结：服务端和客户端斗篷都在打预算极不对称的军备竞赛，工程投入难摊销，失败形态是账户级或域名级。把同样工时挪到一套小而可审计的差异化系统，你得到一个可复用于本地化、个性化、实验的平台，审核者来问时能用书面证据说清楚。先把审计接口建起来，其它都从这里长出来。",{"id":960,"alt":961,"updatedAt":962,"createdAt":962,"url":963,"thumbnailURL":333,"filename":964,"mimeType":965,"filesize":966,"width":967,"height":968},303,"Server-side vs client-side cloaking deep-dive · 服务端 vs 客户端斗篷","2026-06-10T02:41:53.796Z","https://cms-r2.deepclick.com/hero-cloaking-server-client-fa606cb95a41.png","hero-cloaking-server-client-fa606cb95a41.png","image/png",651490,1600,900,{"title":5,"description":970,"image":971},"深入对比服务端与客户端斗篷的实现路径，剖析为什么 headless Chromium 与边缘多次抓取能稳定识破两者，并给出工程师可直接落地、面向广告平台审核可解释的可审计差异化落地页参考架构。",{"id":960,"alt":961,"updatedAt":962,"createdAt":962,"url":963,"thumbnailURL":333,"filename":964,"mimeType":965,"filesize":966,"width":967,"height":968},"published","server-side-vs-client-side-cloaking-zh",{"id":72,"name":975,"avatar":976,"updatedAt":983,"createdAt":984},"DeepClick",{"id":977,"alt":975,"updatedAt":978,"createdAt":978,"url":979,"thumbnailURL":333,"filename":980,"mimeType":965,"filesize":981,"width":982,"height":982},25,"2026-04-22T08:09:22.606Z","https://cms-r2.deepclick.com/头像-白.png","头像-白.png",26626,1024,"2026-04-22T08:09:35.299Z","2026-04-22T06:42:49.116Z",{"id":41,"titleZh":986,"titleEn":987,"slug":988,"order":72,"updatedAt":989,"createdAt":989},"行业信息","Industry Info","industry-info","2026-04-22T03:32:29.529Z","2026-06-10T02:43:57.782Z","2026-06-10T02:44:15.703Z","2026-06-09T07:53:17.267Z","\u003Cdiv class=\"payload-richtext\">\u003Cp>工程师接手「流量差异化」需求，眼前常是三种代码之一：\u003Ccode>User-Agent\u003C/code> 上分支的 Nginx、加载后改写 \u003Ccode>innerHTML\u003C/code> 的 JS，或两者兼具的 Cloudflare Worker。团队叫它斗篷，平台叫它违规。本文从工程视角拆解协议层和 DOM 层发生了什么、检测为什么领先、可审计替代架构长什么样。\u003C/p>\u003Cp>业务和政策全景先看支柱文章 \u003Ca href=\"/zh-CN/resources/blog/what-is-website-cloaking-zh\">网站斗篷\u003C/a>，本文专注系统侧。\u003C/p>\u003Ch2>协议层上「斗篷」的真实含义\u003C/h2>\u003Cp>无斗篷的站点里，爬虫和真实用户的响应在结构和内容上对等。带斗篷的站点会基于请求方属性让响应分叉，且分叉的目的是欺骗审核者而非合理 UX。经典实现两类：\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cp>\u003Cstrong>服务端斗篷\u003C/strong>：分叉发生在 HTML 离开源站（或边缘）之前，机器人和真人收到的字节不同。\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cp>\u003Cstrong>客户端斗篷\u003C/strong>：同一份 HTML 离开源站，JS 根据浏览器侧信号在加载后改写页面。\u003C/p>\u003C/li>\u003C/ul>\u003Cp>检测层面的问题归结为同一个：审核者能否复现「真实用户看到的页面」。\u003C/p>\u003Ch2>服务端斗篷：实现路径\u003C/h2>\u003Ch3>HTTP 响应分支\u003C/h3>\u003Cp>反向代理或应用层中间件根据请求头返回两份不同 HTML。常见分支信号：\u003Ccode>User-Agent\u003C/code> 子串匹配（\u003Ccode>Googlebot\u003C/code>、\u003Ccode>AdsBot-Google\u003C/code>、\u003Ccode>facebookexternalhit\u003C/code>）；源 IP 是否落在已知机房段或爬虫公开 IP 列表；\u003Ccode>Accept-Language\u003C/code>、\u003Ccode>Accept\u003C/code> 头与 Referrer；Geo-IP 和 ASN 查询。\u003C/p>\u003Cp>伪 Nginx 配置：\u003C/p>\u003Cp>```\u003C/p>\u003Cp>if ($http_user_agent ~* &quot;googlebot|adsbot&quot;) {\u003C/p>\u003Cp>rewrite ^ /safe.html last;\u003C/p>\u003Cp>}\u003C/p>\u003Cp>proxy_pass http://money-page-upstream;\u003C/p>\u003Cp>```\u003C/p>\u003Ch3>边缘节点分支\u003C/h3>\u003Cp>Cloudflare Worker、Lambda@Edge 或 Fastly VCL 在更靠近用户的节点做同样判断，可拿更丰富的信号（TLS 指纹、HTTP/2 帧序、JA3/JA4、Bot Management 评分）。输出仍是两份响应体面向两种受众。\u003C/p>\u003Ch3>DNS 层切分\u003C/h3>\u003Cp>较少见但存在：split-horizon DNS 或 GeoDNS 把疑似审核者解析到干净源站，其它流量解析到「钱页」源站。两台源站从不同 IP 输出不同内容，纯靠 header 比对很难关联。\u003C/p>\u003Ch3>为什么服务端斗篷会被识破\u003C/h3>\u003Cp>现代审核管线包含：(1) \u003Cstrong>住宅与移动代理拉取\u003C/strong>，从像真实用户的 IP 请求页面，绕开 ASN 与机房 IP 判别；(2) \u003Cstrong>多次抓取 + 身份轮换\u003C/strong>，同一 URL 用不同 UA、头、TLS 指纹、referrer 抓多次再 diff，差异本身就是信号；(3) \u003Cstrong>从广告点击回放\u003C/strong>，平台从干净基础设施完整回放点击链路（带全部追踪参数），直接打死基于 referrer 的分支；(4) \u003Cstrong>入站方向 TLS / HTTP/2 指纹伪装\u003C/strong>，审核者在网络层已不再「像机器人」；(5) \u003Cstrong>持续复审\u003C/strong>，URL 之后被抽样，「先安全后切钱页」会被时间序列 diff 抓住。\u003C/p>\u003Cp>这些手段都不需要审核者知道你的分支规则。规则只要产生可观测、和「审核者形态流量」相关的差异，规则本身就暴露了。\u003C/p>\u003Ch2>客户端斗篷：实现路径\u003C/h2>\u003Ch3>加载后 DOM 替换\u003C/h3>\u003Cp>源站返回一份温和的 HTML。在 \u003Ccode>DOMContentLoaded\u003C/code> 之后，JavaScript 检查 \u003Ccode>navigator\u003C/code>、\u003Ccode>screen\u003C/code>、计时器或远端决策端点，然后改写 \u003Ccode>document.body.innerHTML\u003C/code>，或把「安全块」隐藏、把「真实块」露出来。\u003C/p>\u003Ch3>JS 选择内容变体\u003C/h3>\u003Cp>变体玩法：页面把两个变体都打包在 DOM 里（或通过 XHR 拉），由一段脚本决定渲染哪份。常被包装成「A/B 测试」或「个性化」，但实际是「审核者 vs 非审核者」的二元决策，不是多变量实验。\u003C/p>\u003Ch3>懒水合 / 延迟拉取\u003C/h3>\u003Cp>页面服务端渲染出一层安全外壳，再水合 React 或 Vue 树，从 JSON 接口拉「真实」内容，并对客户端做校验。设计者的预设是「自动抓取不会跑 JS、不会水合、看不见真实负载」。\u003C/p>\u003Ch3>为什么客户端斗篷会被识破\u003C/h3>\u003Cp>Headless Chromium 和现代审核爬虫栈全部覆盖：(1) \u003Cstrong>默认完整渲染\u003C/strong>，截取水合后的 DOM 而不是初始 HTML；(2) \u003Cstrong>长 settle 窗口\u003C/strong>，等网络空闲、\u003Ccode>requestIdleCallback\u003C/code> 和额外定时器后才快照，延迟几秒救不了你；(3) \u003Cstrong>DOM mutation 观察\u003C/strong>，审核者记录每次 mutation 再和干净运行 diff；(4) \u003Cstrong>反指纹强化\u003C/strong>，\u003Ccode>navigator.webdriver\u003C/code>、缺失 plugin、headless 标记、计时痕迹被系统性抹掉，页面无法稳定识别「这是审核者」；(5) \u003Cstrong>XHR / fetch 拦截\u003C/strong>，所有出站请求都被记录，按启发式返回不同负载的接口本身就是证据。\u003C/p>\u003Cp>DOM 是可观测的。渲染后的页面和审核者看到的不一样，差异就是违规，JavaScript 写得再花哨也救不了。\u003C/p>\u003Ch2>混合斗篷：叠加无法买到持久性\u003C/h2>\u003Cp>常见演进：服务端规则过滤明显机器人，客户端规则处理边界 case，再加综合两层的「信任分」。代码变复杂，维护成本上升，底层问题没变。检测不找某种具体把戏，而是找「给审核者看的页面」和「给真实流量看的页面」之间任何可观测的分叉。叠加层数越多，泄漏面越大：决策端点响应结构在分桶下不一致；资源 URL 只出现在某变体；DOM 体积、渲染时间、Lighthouse 指标按分支聚类；第三方标签条件加载；\u003Ccode>canonical\u003C/code> 与 OpenGraph 在变体间漂移。\u003C/p>\u003Cp>把工程时间花在堆混淆上，就没花在合规版本上：用一种你能在审核面前讲清楚的方式给对的用户对的体验。\u003C/p>\u003Ch2>合理的工程模式：可审计的差异化\u003C/h2>\u003Cp>按上下文区分体验不是问题，让审核者看不懂才是。推荐做法（详见 \u003Ca href=\"/zh-CN/resources/blog/cloaking-vs-smart-landing-pages-zh\">斗篷 vs 智能落地页\u003C/a>）是反过来设计：差异化逻辑、输入、输出默认可审计，变体设计成「单独看每个都合规」「只在合法维度上分叉」（语言、地域、设备、授权、活动）。\u003C/p>\u003Cp>四条契约：(1) 每个变体在版本化目录可单独审阅；(2) 每次路由决策连同输入一起被记录；(3) 拿到日志的审核者能回放任意历史响应；(4) 判定永远不含「机器人 vs 真人」分支，决策输入必须对用户有意义（locale、套餐、A/B 分桶），不是对反检测有意义。\u003C/p>\u003Ch2>参考架构：可审计的流量差异化\u003C/h2>\u003Cp>下面是一个最小可行的参考设计，小到一个周末能落地，完整到能扛住平台审核。\u003C/p>\u003Cp>```\u003C/p>\u003Cp>+-----------------------------+\u003C/p>\u003Cp>request  --&gt;  |  1. 上下文解析器             |\u003C/p>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>locale / geo / device\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>campaign / referrer\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>consent / auth state\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Cp>+--------------+--------------+\u003C/p>\u003Cp>                                |\u003C/p>\u003Cp>v\u003C/p>\u003Cp>+-----------------------------+\u003C/p>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>2. 变体选择器\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>读取变体目录\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>应用路由规则\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>返回 variant_id\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Cp>+--------------+--------------+\u003C/p>\u003Cp>                                |\u003C/p>\u003Cp>v\u003C/p>\u003Cp>+-----------------------------+\u003C/p>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>3. 渲染器\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>输出 variant_id 对应内容\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>相同上下文 → 相同字节\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Cp>+--------------+--------------+\u003C/p>\u003Cp>                                |\u003C/p>\u003Cp>v\u003C/p>\u003Cp>+-----------------------------+\u003C/p>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>4. 决策日志\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>context hash\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>variant_id / version\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>timestamp / request_id\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Cp>+--------------+--------------+\u003C/p>\u003Cp>                                |\u003C/p>\u003Cp>v\u003C/p>\u003Cp>+-----------------------------+\u003C/p>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>5. 审计接口\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>/audit?request_id=...\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>→ 输入 + 变体 + html\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Cp>+-----------------------------+\u003C/p>\u003Cp>```\u003C/p>\u003Ch3>各组件契约\u003C/h3>\u003Cp>\u003Cstrong>1. 上下文解析器\u003C/strong>：从请求到结构化上下文对象的纯函数，输入显式有限（\u003Ccode>locale\u003C/code>、\u003Ccode>country\u003C/code>、\u003Ccode>device_class\u003C/code>、\u003Ccode>campaign_id\u003C/code>、\u003Ccode>consent_state\u003C/code>、\u003Ccode>is_authenticated\u003C/code>）。关键：不接受「是不是机器人」作为输入。\u003C/p>\u003Cp>\u003Cstrong>2. 变体选择器\u003C/strong>：从版本化目录读（如 \u003Ccode>variants/v3/checkout-IN-mobile.html\u003C/code>），按声明式规则做选择。规则是数据不是代码分支，PR 可 review，凭上下文对象可复现。\u003C/p>\u003Cp>\u003Cstrong>3. 渲染器\u003C/strong>：返回所选变体。相同上下文，任何客户端拿到相同字节。\u003C/p>\u003Cp>\u003Cstrong>4. 决策日志\u003C/strong>：每请求写一行 hash 后的上下文、variant_id、version、timestamp、稳定 request_id，这就是证据堆。\u003C/p>\u003Cp>\u003Cstrong>5. 审计接口\u003C/strong>：给定 request_id 返回当时输入和渲染出的 HTML，几秒回答「这个用户当时为什么看到这页」。\u003C/p>\u003Cp>审核者打 flag 时你不用辩解。把决策日志、变体目录、路由规则甩出去，争议靠证据收尾。\u003C/p>\u003Ch2>对比：服务端斗篷 vs 客户端斗篷 vs 智能落地页架构\u003C/h2>\u003Cdiv class=\"lexical-table-container\">\n        \u003Ctable class=\"lexical-table\" style=\"border-collapse: collapse;\">\n          \u003Ctbody>\u003Ctr class=\"lexical-table-row\">\n        \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>维度\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>服务端斗篷\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>客户端斗篷\u003C/p>\n      \u003C/th>\n    \u003Cth\n        class=\"lexical-table-cell lexical-table-cell-header-1\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>智能落地页架构\u003C/p>\n      \u003C/th>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>实现面\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>边缘 / 代理 / 源站中间件\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>JS bundle + 决策端点\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>变体目录 + 选择器 + 日志\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>主要检测手段\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>多次抓取 + 身份轮换\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>Headless 渲染 + DOM diff\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>不需要；差异化本就公开\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>抗审核能力\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>弱；审核能力持续提升\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>弱；Chromium 回放已是标配\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>强；以可审计性获取通过\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>长期维护成本\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>上升；每个平台都要追规则\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>上升；指纹猫鼠循环\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>平稳；规则是声明式数据\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>失效形态\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>账户封停、域名拉黑\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>账户封停、域名拉黑\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>变体回滚、无政策风险\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>合规姿态\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>违反主流广告政策\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>违反主流广告政策\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>与平台预期一致\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003Ctr class=\"lexical-table-row\">\n        \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>工程 ROI\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>首次封号即转负\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>首次封号即转负\u003C/p>\n      \u003C/td>\n    \u003Ctd\n        class=\"lexical-table-cell lexical-table-cell-header-0\"\n        \n        \n        style=\"border: 1px solid #ccc; padding: 8px;\"\n      >\n        \u003Cp>正；可复用于本地化、个性化、实验\u003C/p>\n      \u003C/td>\n    \n      \u003C/tr>\u003C/tbody>\n        \u003C/table>\n      \u003C/div>\u003Ch2>迁移实务\u003C/h2>\u003Cp>如果你正在维护一套带斗篷的部署准备迁到上面的架构：\u003C/p>\u003Cul class=\"list-bullet\">\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"1\"\n        >\u003Cp>\u003Cstrong>先盘点分叉点\u003C/strong>。「机器人版本」省略了什么？为什么？答案常是「审核者会质疑的说法」——本质是产品和文案问题。\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"2\"\n        >\u003Cp>\u003Cstrong>按对用户有意义的维度切变体\u003C/strong>：locale、设备、授权、活动。每个变体必须独立扛过人工审核。\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"3\"\n        >\u003Cp>\u003Cstrong>决策必须由上下文对象 deterministically 复现\u003C/strong>。放不回去就辩不了。\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"4\"\n        >\u003Cp>\u003Cstrong>删除解析器里所有探测类输入\u003C/strong>：不要 UA 分类、JA3、「是不是自动化」。解析器不该关心。\u003C/p>\u003C/li>\u003Cli\n          class=\"\"\n          style=\"\"\n          value=\"5\"\n        >\u003Cp>\u003Cstrong>跑一段影子窗口\u003C/strong>。新系统先只记日志不接流量，与旧系统 diff，按变体逐个迁。\u003C/p>\u003C/li>\u003C/ul>\u003Cp>TikTok 和 Meta 的审核差异详见 \u003Ca href=\"/zh-CN/resources/blog/cloaking-for-tiktok-facebook-ads-zh\">面向 TikTok 与 Facebook 广告的斗篷\u003C/a>；厂商横评看 \u003Ca href=\"/zh-CN/resources/blog/cloaking-tools-compared-2026-zh\">2026 斗篷工具横评\u003C/a>；智能落地页都救不了的场景看 \u003Ca href=\"/zh-CN/resources/blog/when-not-to-use-cloaking-zh\">什么时候不该用斗篷\u003C/a>。\u003C/p>\u003Ch2>FAQ\u003C/h2>\u003Cp>\u003Cstrong>Q1. 服务端斗篷是不是比客户端斗篷更难被检测？\u003C/strong>\u003C/p>\u003Cp>边际上更难但不持久。服务端斗篷迫使检测方投入住宅代理和指纹轮换，客户端斗篷只要一个 headless 渲染器就破了。大平台两类探针都常态化部署，差距不足以作为规划依据。\u003C/p>\u003Cp>\u003Cstrong>Q2. 用 TLS 指纹随机化绕审核可行吗？\u003C/strong>\u003C/p>\u003Cp>你可以让某一类探针变复杂，但平台审核者不是唯一对手。持续复审、点击回放、用户举报都绕开了网络层混淆。半衰期很短。\u003C/p>\u003Cp>\u003Cstrong>Q3. 服务端渲染（SSR）和服务端斗篷是一回事吗？\u003C/strong>\u003C/p>\u003Cp>不是。SSR 把同一份 canonical 内容在服务端渲染给所有客户端。服务端斗篷刻意根据请求方渲染不同 canonical 内容。机制重叠，意图相反。\u003C/p>\u003Cp>\u003Cstrong>Q4. 我们在用 feature flag，算不算斗篷？\u003C/strong>\u003C/p>\u003Cp>当 flag 取值来源于探测信号（UA、ASN、headless 标记），且最终体验是审核者会拒绝的，那就是斗篷。基于用户属性（套餐、地区、opt-in）并写进审计日志的 feature flag 不是斗篷，是正常产品工程。\u003C/p>\u003Cp>\u003Cstrong>Q5. 智能落地页架构和「CDN + 边缘规则」有什么区别？\u003C/strong>\u003C/p>\u003Cp>边缘规则只是实现细节。架构的定义性特征是决策日志和审计接口，不是路由跑在哪层。变体选择器放边缘、放应用层、放 serverless 都行。要紧的是每次决策可复现、每个变体单独合规。\u003C/p>\u003Cp>\u003Cstrong>Q6. 一套斗篷系统快要翻车的最大单点工程信号是什么？\u003C/strong>\u003C/p>\u003Cp>路由层里以探测信号为输入的分支。如果你的代码里有 \u003Ccode>isBot\u003C/code> 或 \u003Ccode>isReviewer\u003C/code>，离下次检测升级就一步距离。删掉这种输入，重新围绕「对用户有意义的维度」设计，整个风险类目就消失了。\u003C/p>\u003Ch2>收尾\u003C/h2>\u003Cp>诚实总结：服务端和客户端斗篷都在打预算极不对称的军备竞赛，工程投入难摊销，失败形态是账户级或域名级。把同样工时挪到一套小而可审计的差异化系统，你得到一个可复用于本地化、个性化、实验的平台，审核者来问时能用书面证据说清楚。先把审计接口建起来，其它都从这里长出来。\u003C/p>\u003C/div>","https://deepclick.com/zh-CN/resources/blog/server-side-vs-client-side-cloaking-zh",{"zh-CN":973},1781059744601]