最近上线一个香港项目,使用了腾讯云的EdgeOne,已经在UAT测试没有任何问题。
生产上线以后发现内页图片无法访问,全部400错误:


甚至部分api地址也是不定时的报错400

更甚至首页有时候直接就报错400

国内访问很高的概率出现400错误,但是只要一翻墙,访问就正常,但是在香港、澳大利亚、新加坡也有部分客户访问会出现400错误。
但是一样配置的UAT一切正常,生产环境唯一不一样的就是域名。
在花了两天时间排查了CDN、安全防护所有一切可能以后,向腾讯云提交了工单。
得到了这么一个结果:
背景说明:Domain Fronting 防护机制
在 2023年起,香港政府及其承包供应商对 Domain Fronting(域名前置)攻击要求加强防护。
该攻击方式的原理是:
攻击者可以伪造 TLS 握手里的 SNI(Server Name Indication) 和 HTTP 请求头中的Host 不一致,例如:
SNI 显示为gov.hk (可信域名)
Host 头却指向evil.com (恶意服务器)
这会导致安全设备、CDN 或 WAF 错误地认为是合法流量,从而实现绕过检测、信息隐匿等攻击行为。
因此,安全需求明确提出:
“当客户端携带的 SNI 与 HTTP Host Header 不一致时,系统需拦截请求并返回400。”
所以当我们通过多域名去区分pc端、手机端、文件、API的时候,就出现了不一致的情况。
比如两域名(www 和m)在相同IP 下、使用同一通配符或 SAN 证书,且服务端启用了HTTP/2 (h2),浏览器为了性能优化启用了Connection Coalescing(连接复用)机制。
其行为是:
浏览器仅建立 一次 TLS 连接(SNI = www.xxx.hk);
接着在这条TLS 连接上复用通道发送Host: m.xxx.hk 请求。
出于 香港政府Domain Fronting 策略要求,该行为被判断为异常访问(SNI/Host 不一致),EdgeOne 安全引擎触发 防护拦截 → 返回 HTTP 400
所以关闭EdgeOne默认的http2加速就可以了。



