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
相关产品推荐
相关产品推荐

