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

NestJS中设置响应头无效果,请求技术排查指导

NestJS响应头设置不显示问题

我正在学习NestJS,设置响应头时遇到了问题。代码片段如下:

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  //@get('users')
  @Get()
  @Header('Content-Type','text/html')
  getHello(): string {
    console.log('log')
    return this.appService.getHello();
  }
} 

运行时终端能看到log输出,但Chrome浏览器网络面板里看不到设置的响应头。我跟着教程操作,查了官方文档,也找了相关Issue,还是没搞清楚问题出在哪。


排查解决方向

1. 检查全局拦截/过滤逻辑

项目里的全局拦截器、过滤器或中间件可能会覆盖、删除你设置的响应头。比如全局异常过滤器如果重新构造了响应,就会导致原头丢失。去main.ts里看看有没有app.useGlobalInterceptors()这类配置,逐一排查这些组件的处理逻辑。

2. 改用原生响应对象设置头

跳过@Header()装饰器,直接在方法里获取原生响应对象设置头,验证是否生效:

import { Res } from '@nestjs/common';
import type { Response } from 'express';

@Get()
getHello(@Res() res: Response): void {
  console.log('log');
  res.setHeader('Content-Type', 'text/html');
  res.send(this.appService.getHello());
}

注意:用@Res()会接管响应处理,不能再同时返回值,必须用res.send()发送响应。

3. 排除浏览器缓存干扰

打开无痕模式测试,或者在请求URL后加随机参数(比如/?t=12345),避免浏览器返回缓存的旧响应。另外要确认你查看的是GET请求的响应头,不是OPTIONS预检请求的。

4. 升级NestJS版本

部分旧版本NestJS的@Header()装饰器存在bug,尝试升级到最新稳定版:

npm update @nestjs/core @nestjs/common

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:30