Firefox 52.6 CSS下载字体被拦截(Content Blocked Source)求助
根据你描述的场景——Apache搭建的纯HTTP站点、内嵌CSS加载字体,Chrome正常但Firefox 52.6报Content Blocked Source,且直接访问字体URL可正常下载,以下是针对性的排查和解决方案:
1. 优先修复Apache的字体MIME类型设置
旧版Firefox(尤其是52.x ESR版本)对字体文件的Content-Type响应头检查非常严格,而Apache默认可能将.ttf文件识别为application/octet-stream,这会触发Firefox的拦截机制。
你需要在Apache的配置文件(httpd.conf)或者站点根目录的.htaccess文件中添加以下规则,确保字体文件返回正确的MIME类型:
AddType font/ttf .ttf AddType font/otf .otf AddType font/woff .woff AddType font/woff2 .woff2
添加后重启Apache,再测试字体加载。这是此类问题最常见的根源,因为Chrome对MIME类型的兼容性更宽松,不会因为这个拦截字体。
2. 检查Firefox旧版的特定安全设置
虽然你已经修改了security.fileuri.strict_origin_policy,但Firefox 52还有几个和字体加载相关的配置需要确认:
- 在Firefox地址栏输入
about:config,搜索font.downloadable_fonts.enabled,确保其值为true(默认应为true,但可能被误修改) - 搜索
security.csp.enable,如果你的站点没有配置内容安全策略(CSP),可以临时将其设为false测试(测试完成后建议改回,避免全局安全风险) - 检查
network.http.accept.default,确保其值包含font/ttf或font/*,这样Firefox会正确接收字体类型的响应
3. 确保@font-face的路径写法绝对可靠
虽然你提到将字体移到根目录也无效,但还是建议使用绝对路径来避免相对路径的解析歧义。比如如果你的字体在/test/Myfont.ttf,CSS里应该写:
@font-face { font-family: 'Myfont'; src: url('/test/Myfont.ttf') format('truetype'); }
绝对路径可以避免页面嵌套或目录结构变化导致的路径解析错误。
4. 排除Apache目录访问限制(低概率但需确认)
虽然你直接访问字体URL正常,但可以检查/test目录下是否有.htaccess文件,确保没有设置针对CSS请求的特殊拦截规则(比如限制请求头类型)。不过这种情况很少见,因为Apache默认不会区分请求是来自浏览器直接访问还是CSS加载。
按照上述步骤逐一排查,优先处理MIME类型的问题,应该能解决Firefox 52.6的字体拦截问题。
内容的提问来源于stack exchange,提问作者Tyler Durden

