@font-face {
  font-family: 'Noto Sans SC';
  src: url('/fonts/noto-sans-sc.woff2') format('woff2');
  font-display: swap;
}

断网测试才发现 head 里挂着一行 fonts.googleapis.com,首字节还没回来字体请求已经飞出去,访客 IP 直接落到境外服务器,同意按钮还停在屏幕底部。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,主题把字体地址写进样式表,link 在 body 之前就被解析,同意脚本排在页脚,顺序上来不及拦。字体请求本身不读 cookie,任何提前加载都会把来源地址送出去。

这次卡住的地方就在「第三方字体合规」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:把 css 和 woff2 下载到本地目录,用 @font-face 指向站内路径,远程那一行删干净;在 CSP 里把 font-src 和 style-src 收成 self,境外域名自然发不出去;本地确实缺的语种才留远程字体,改成同意后动态插入 link。

改完只确认一件事:DevTools 的 Network 里筛 fonts.gstatic 结果为空,首屏字体仍然正常显示,中文没有变成方框。

作者 9823189