线上抓取接口时,浏览器打开页面一切正常,换成脚本却连续收到403、验证码或连接重置;更麻烦的是,同样的代码换一台机器就恢复,改User-Agent却仍然失败。问题通常藏在CDN边缘节点的多层风控中,单看状态码很难判断到底是IP信誉、TLS特征,还是业务WAF规则在拦截。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:onidel(全球云服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
先看懂CDN为什么拦截同一请求
真实浏览器和脚本发起请求,表面上看都是访问同一个URL,实际经过的协议协商过程可能完全不同。浏览器在TLS握手阶段会发送特定的ClientHello信息,包括密码套件、扩展列表、扩展顺序、ALPN以及GREASE值。服务端把这些信息计算成TLS指纹,常见的JA4识别就是其中一种方式。指纹与已知自动化工具、代理出口或不常见客户端不匹配时,边缘节点可以在HTTP请求尚未抵达源站前直接拒绝。
即使TLS握手通过,HTTP2指纹仍可能暴露差异。浏览器对SETTINGS帧参数、窗口大小、伪首部顺序以及Cookie、缓存控制头的组织方式有稳定习惯,而脚本库可能采用另一套默认配置。此时WAF并不需要判断请求内容是否恶意,只要发现“网络层身份”和“应用层声明”互相矛盾,就可能提高风险分数。

用逐项复现定位真正的拦截层
判断时不要同时修改所有变量,先建立一条真实浏览器基线,并记录完整请求顺序、状态码、响应头和响应体。可以在相同出口、同一时间窗口内,用协议级工具复现浏览器的ClientHello,再逐步加入HTTP2参数,最后才替换请求头。随身服务器这类可控环境可用于固定出口和重放条件,关键不是工具本身,而是每轮只改变一个因素。
如果更换出口IP后恢复,而TLS指纹始终不变,优先怀疑IP信誉、ASN或地域风险。若保持同一IP、只把脚本握手参数改成浏览器样式后恢复,拦截更可能来自TLS指纹。若TLS层正常,但调整SETTINGS、伪首部顺序或Cookie顺序才改变结果,则应检查HTTP2指纹和请求一致性。不要只看403:连接在握手后被重置,可能是边缘策略直接阻断;返回明确的规则编号或风控页面,通常说明WAF规则已经命中。
请求顺序也是常被忽略的陷阱。真实页面可能先加载主文档,再请求脚本、字体和接口,Cookie、Referer、Sec-Fetch-Site及资源耗时彼此吻合;脚本却直接调用接口,或在短时间内高频重试,很容易触发顺序异常和频率规则。排查时应记录DNS、TCP、TLS、首个业务请求各阶段耗时,并核对重试是否放大了风险。没有单一指纹能直接证明恶意,最终结论应来自基线复现、单变量修改和边缘响应证据的交叉验证。

剩余原理:风控看到的是一条链
CDN 风控分为边缘信誉、传输特征、请求一致性和业务规则四层:边缘信誉看 IP、ASN;传输层识别 TLS指纹 与 JA4识别;一致性层核对浏览器声明与行为;业务层结合频次、路径、Cookie 和挑战状态。不同 POP 结果不同,说明规则分层,并非参数非法。
TLS 指纹来自 ClientHello 的密码套件、扩展和顺序,JA4 是标准化摘要。它可提示客户端类型与声明不一致,但不能单独证明是机器人;平台也可能使用 JA3 或设备画像。边缘终止 TLS 后,CDN 到源站的指纹不能替客户端背书。把 JA4 等同浏览器型号、只改 UA,通常无效。
HTTP2指纹还可能包含 SETTINGS、窗口更新、优先级、伪首部顺序、头部顺序与大小写。Chrome、无头浏览器、curl 和代理转发可能不同;但部分平台只读取重建请求,不保留 h2 特征。应比较同一路径下正常与失败客户端,确认差异进入决策链。

排查步骤与可执行检查清单
常见坑是同时改 UA、Cookie 和 TLS 库,导致没有变量对照;清空 Cookie 后丢失挑战令牌;只测 POP;把源站 403、CDN 挑战页、限流 429 混为一谈。复现时记录时间、响应头、正文、Ray ID、节点和浏览器版本。
可执行检查清单:①正常浏览器、无痕窗口和故障客户端各测三次,对比状态码、正文与挑战;②确认 CDN 链路,以 Ray ID 定位节点;③采集 JA3/JA4、HTTP2指纹、UA、Client Hints、Accept-Language,定位冲突层;④核对 Host、Origin、Referer、Cookie、头部顺序与时序;⑤做单变量 A/B,每次只改一项;⑥检查 IP/ASN、代理标签、账号策略及节点规则;⑦若确认误封,提交节点、Ray ID、指纹差异和对照样本申请复核。
结论是,风控分层决定信号如何组合,请求一致性决定组合是否自洽。先证明差异在哪一层,再调整变量,不要靠伪装 UA 盲猜。由此把“被封”还原成可复现、可定位、可回滚的证据链。


喜欢
顶
难过
囧
围观
无聊





