设置了font-src为什么字体还是被阻止加载?
我在项目里用Google字体时遇到了CSP报错,明明在HTTP头里写了font-src fonts.gstatic.com,但控制台还是提示“Blocked loading font”…
这是我的配置示例:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; font-src fonts.gstatic.com">
页面里这样引入字体:
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="external nofollow" rel="stylesheet">
报错显示需要允许fonts.googleapis.com域名,但font-src里明明只写了fonts.gstatic.com啊?两者的域名关系搞混了吗?
代码放这了:
注意要根据你实际的CSS引入源来配置,如果你用了多个字体服务,可能还要加上其他域名。另外fonts.googleapis.com和fonts.gstatic.com这两个域名其实是Google的CDN搭配使用,一个负责CSS解析,一个负责字体文件分发,理解它们的分工后配置就不会错了。
font-src 只写了 fonts.gstatic.com,但你引入的字体链接是 https://fonts.googleapis.com/...,这两个域名不一样,所以字体被拦了。
fonts.googleapis.com 是 Google Fonts 的样式表地址,fonts.gstatic.com 是字体文件的真实地址。
浏览器加载流程是这样的:
1. 先加载 fonts.googleapis.com 上的 CSS 文件
2. 该 CSS 文件里引用了 fonts.gstatic.com 上的真实字体文件
所以 CSP 应该这样配:
重点:
- font-src fonts.gstatic.com:允许加载字体文件
- style-src 'self' fonts.googleapis.com:允许加载 Google Fonts 的 CSS 文件
字体能正常加载的关键是这两个域名都要放行。
代码给你贴好了,直接用这个 CSP 头应该就没问题了。