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

通过Kong访问NestJS时POST请求Content-Type被替换问题

问题根源与解决方案
  • 问题不在Kong,而是你请求里的mode: "no-cors"导致浏览器主动修改了Content-Type
  • 浏览器在no-cors模式下,仅允许发送简单请求头,其中Content-Type只能是application/x-www-form-urlencoded、multipart/form-data或text/plain。你设置的application/json不属于简单请求头范畴,浏览器会自动将其替换为text/plain;charset=UTF-8,Kong只是原样转发了这个被浏览器修改后的请求头。

解决步骤

1. 移除请求中的mode: "no-cors"

修改你的fetch代码:

fetch(`${API_URL}${MESSAGE_API_PATH}`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json;charset=UTF-8",
    Accept: "application/json;charset=UTF-8",
  },
  body: JSON.stringify({
    foo: "Hello world"
  }),
})

2. 配置跨域支持(CORS)

移除no-cors后,需要确保服务端允许跨域请求:

  • NestJS应用配置CORS:在main.ts中启用CORS
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors({
    origin: "你的前端域名", // 示例:"http://localhost:3000"
    allowedHeaders: ["Content-Type", "Accept"],
    methods: ["POST", "GET", "OPTIONS"]
  });
  await app.listen(3000);
}
bootstrap();
  • Kong网关配置CORS插件:给对应的路由或服务添加CORS插件,允许前端域名的跨域请求,配置示例:
# 给目标服务添加CORS插件
curl -X POST http://kong-admin:8001/services/your-service-name/plugins \
  -d name=cors \
  -d config.origins=你的前端域名 \
  -d config.credentials=true \
  -d config.allowed_headers="Content-Type,Accept" \
  -d config.allowed_methods="POST,GET,OPTIONS"

这样修改后,浏览器会保留你设置的application/json请求头,Kong就能正确转发到NestJS应用,满足接口的Content-Type要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:32:12