You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Tomcat部署Angular应用遇WOFF2字体解析错误求助

WOFF2字体部署到Spring Boot/Tomcat后解析错误的排查思路

问题背景

  • 本地硬盘加载Angular应用时,FontIcons可正常工作(仅URL错误会导致服务器通信问题);但部署到Spring Boot+Tomcat服务器后,出现错误:OTS parsing error: Size of decompressed WOFF 2.0 is less than compressed size
  • 对比磁盘与HTTP请求返回的字体文件十六进制数据,发现字节被篡改:
    磁盘文件: 77 4F 46 32 00 01 00 00 00 01 F5 60 00 0F 00 00
    HTTP返回: 77 4F 46 32 00 01 00 00 00 01 EF BF BD 60 00 0F
    
  • 服务器响应头信息:
    HTTP/1.1 200
    Vary: Origin
    Vary: Access-Control-Request-Method
    Vary: Access-Control-Request-Headers
    Last-Modified: Tue, 26 Sep 2023 12:54:26 GMT
    Accept-Ranges: bytes
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 0
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    Pragma: no-cache
    Expires: 0
    X-Frame-Options: DENY
    Content-Type: font/woff2
    Content-Length: 128352
    Date: Fri, 29 Sep 2023 06:51:55 GMT
    Keep-Alive: timeout=20
    Connection: keep-alive
    
  • 浏览器差异:Chrome 116.0.5845.141可正常运行,Edge 117.0.2045.36仍存在解析问题

排查解决思路

1. 检查字符编码转换配置

  • 注意到F5被替换为EF BF BD(UTF-8替换字符�),说明服务器可能将二进制字体文件误当作文本进行了编码转换。
  • 排查Spring Boot的HttpMessageConverter配置,确保未对font/woff2这类二进制媒体类型启用字符编码转换。
  • 检查Tomcat的server.xml或web.xml,确认全局字符过滤器(如CharacterEncodingFilter)未将*.woff2、*.woff等后缀的请求纳入文本处理范围,需添加排除规则。

2. 验证静态资源处理逻辑

  • 确认Spring Boot是否通过默认的ResourceHttpRequestHandler处理静态资源,排查是否自定义资源处理器导致二进制文件被篡改。
  • 检查application.properties/application.yml中的spring.http.encoding.*配置,这类配置应仅作用于文本类型(如text/html、application/json),不要覆盖二进制资源。
  • 确保字体文件位于Angular构建后的assets目录,Spring Boot正确映射了静态资源路径(默认classpath:/static/、classpath:/public/等)。

3. 排查压缩与缓存配置

  • 检查Tomcat或Spring Boot是否启用Gzip压缩,确认压缩规则正确处理woff2文件,错误的压缩配置可能导致文件损坏。
  • 响应头中Cache-Control设置为no-cache, no-store,虽不直接导致篡改,但可临时调整为max-age=86400测试是否影响文件传输完整性。

4. 验证文件传输完整性

  • 对比服务器存储的字体文件与本地文件的MD5/SHA1哈希值,确认部署过程中文件未损坏。
  • 使用curl或Postman下载服务器上的字体文件,保存后对比十六进制数据,确认是服务器返回时篡改,还是传输过程中出现问题。

5. Edge浏览器专项排查

  • 打开Edge开发者工具的「网络」面板,查看字体文件的实际下载大小是否与Content-Length一致。
  • 勾选「禁用缓存」后重新加载页面,排除缓存的损坏文件影响。
  • 临时禁用Edge所有扩展程序,排查是否有扩展拦截或修改字体文件。

6. 显式配置媒体类型映射

  • 在Spring Boot中显式配置woff2的媒体类型映射,确保服务器正确识别:
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
            configurer.mediaType("woff2", MediaType.valueOf("font/woff2"));
        }
    }
    
    或在application.properties中添加:
    spring.mvc.media-types.woff2=font/woff2
    

内容的提问来源于stack exchange,提问作者Jonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:15:12