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

NestJS获取Swagger文档时API定义加载失败:Chrome报错Brave正常

解决NestJS Swagger在Chrome中出现「Failed to load API definition」(ERR_CONTENT_DECODING_FAILED 304)的问题

针对你遇到的仅Chrome报错、Brave正常的情况,以下是几个可行的解决思路:

  • 清除Chrome缓存
    错误码304说明Chrome复用了旧的缓存资源,而该资源可能存在编码异常。按下Ctrl+Shift+Delete打开清除界面,勾选「缓存的图片和文件」,时间范围选「所有时间」,清除后重新访问Swagger文档。

  • 临时禁用响应压缩排查
    「ERR_CONTENT_DECODING_FAILED」通常和Gzip/Brotli压缩有关。如果你的项目启用了CompressionMiddleware,先注释掉相关配置:

    // main.ts 中注释压缩中间件
    // app.use(compression());
    

    重启服务后测试,若恢复正常,说明是压缩配置与Chrome缓存机制冲突。

  • 让压缩中间件排除Swagger路径
    不想完全禁用压缩的话,可配置压缩中间件跳过Swagger相关接口:

    app.use(compression({
      filter: (req, res) => {
        // 排除Swagger JSON和UI路径
        if (req.path.includes('/ripa/docs-json') || req.path.includes('/ripa/docs')) {
          return false;
        }
        return compression.filter(req, res);
      },
    }));
    
  • 强制Swagger响应不缓存
    手动处理Swagger JSON的路由,添加缓存控制头,阻止Chrome缓存该文件:

    const swaggerOptions = new DocumentBuilder()
      .setTitle('你的API')
      .setDescription('API描述')
      .setVersion('1.0')
      .build();
    const document = SwaggerModule.createDocument(app, swaggerOptions);
    
    // 自定义Swagger JSON路由,添加缓存禁用头
    app.get('/ripa/docs-json', (req, res) => {
      res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
      res.setHeader('Pragma', 'no-cache');
      res.setHeader('Expires', '0');
      res.json(document);
    });
    
    // 挂载Swagger UI
    SwaggerModule.setup('/ripa/docs', app, document);
    
  • 排查Chrome扩展干扰
    部分广告拦截、隐私保护类扩展可能篡改响应内容,导致解码失败。尝试用Chrome隐身模式访问,若正常,逐个禁用扩展找出问题所在。

内容的提问来源于stack exchange,提问作者Engr. Umar Choudhary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:37:33