字体托管
Realm 不直接走 fonts.googleapis.com——国内访问 Google Fonts 不稳定。所有字体文件下载后改写 CSS,托管在 cdn.arsvine.com/shared/fonts/。
三个字族
Noto Serif SC 500 实际未用,已在 data/site.ts 里裁掉。三个字族 4 个 wght 值切 unicode-range。
真理之源
cdnPreconnect在<head>加<link rel="preconnect">,缩短 TLS 握手googleStylesheet是输入,仅给scripts/fetch-google-fonts.mjs用cdnStylesheet是输出,浏览器实际加载的 CSS
抓取脚本
脚本做的事:
- 用现代 Chrome User-Agent 拉 Google CSS
- 下载所有
.woff2 - 把每条
url()改写为cdn.arsvine.com/shared/fonts/<family>/<file> - 写到
public/_fonts-staging/
public/_fonts-staging/ 是临时目录,gitignored,不入版本控制。
上传与元数据
COS 自定义 header 严格:
Value 字段只能写值,不能把 Cache-Control: public, ... 整段粘进去。错填会导致 Cache-Control: Cache-Control: ...,Firefox 拒收字体,传统中文偶现「豆腐字」(GOTCHAS.md 第 3 条)。
验证
预期看到 Content-Type 与 Cache-Control 各出现一次,值正确。
Variable font 去重
Google Fonts 会对同一份 .woff2 返回多个 @font-face 块(不同 font-weight)。这是 Variable Font 的预期行为——一个文件覆盖连续 wght 轴。不要重写 fetch-google-fonts.mjs 强制「一个 weight 一个文件」(GOTCHAS.md 第 4 条)。