AMP CDN下无法访问受CORS保护的Web字体资源解决方案咨询
解决AMP CDN无法访问受CORS保护的Web字体问题
你遇到的核心问题其实是AMP CDN代理请求时携带的Origin头和你预期的用户访问域名不一致,导致你的CORS规则没有放行请求。我来帮你拆解问题和对应的解决方案:
问题根源
AMP CDN(比如cdn.ampproject.org)在替终端用户请求你的Web字体时,发送的Origin请求头是AMP CDN自身的域名,而非用户浏览器所在的域名。如果你的源站正则只匹配用户域名,自然不会返回允许AMP CDN访问的CORS响应头,最终导致资源加载失败。
解决方案步骤
1. 调整Origin匹配规则,加入AMP CDN域名
把AMP CDN的域名https://cdn.ampproject.org添加到你的正则匹配列表中。这样当AMP CDN发起请求时,源站会返回Access-Control-Allow-Origin: https://cdn.ampproject.org,允许它获取并缓存资源。
- 如果你需要限制仅特定用户域名+AMP CDN访问,确保正则同时覆盖这两类Origin(比如用
(https://your-allowed-domains\.com|https://cdn\.ampproject\.org)这类规则)。
2. 用curl验证配置是否生效
模拟AMP CDN的请求来测试你的源站响应:
curl -H "Origin: https://cdn.ampproject.org" -I https://your-domain.com/path/to/protected-font.woff2
检查响应头必须包含:
Access-Control-Allow-Origin: https://cdn.ampproject.orgVary: Origin(你已经配置了这个,保持即可,它能确保缓存服务器正确区分不同Origin的响应)
3. 确认AMP页面的字体加载方式合规
确保你的AMP页面中Web字体是通过AMP允许的方式加载的,比如使用<link rel="preload" as="font" crossorigin>标签,或者AMP官方推荐的字体加载方案,避免因加载方式不符合AMP规范导致的额外问题。
额外说明
这种配置既能满足你保护资源的法律要求——只有你授权的AMP CDN和指定用户域名能直接访问源站资源,终端用户是通过AMP CDN的缓存间接获取;又能兼容AMP的CDN代理机制,让资源正常加载。
内容的提问来源于stack exchange,提问作者Nils Goroll
相关产品推荐
相关产品推荐

