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

Node.js HTTP服务返回204 NO CONTENT时响应挂起如何解决

问题根因

HTTP 规范明确规定 204 No Content 响应禁止包含任何响应体,即便是空字符串也不允许。
你代码中调用了 response.write() 方法,哪怕传入的是空字符串,Node.js 原生 HTTP 模块也会自动为响应添加 Transfer-Encoding: chunked 头,而该头部是不允许出现在 204 响应中的。这会导致客户端误认为当前响应有分块的响应体需要接收,就会一直等待数据传输,最终触发超时。

解决方案

直接删除 response.write() 调用即可,设置状态码后直接调用 response.end() 结束响应:

response.statusCode = 204;
// 无需执行任何response.write操作
response.end();

如果你的业务逻辑需要兼容普通响应和 204 这类无响应体的响应,可以加一层状态码判断再决定是否写入响应体:

// 所有不允许携带响应体的HTTP状态码
const NO_BODY_STATUS = new Set([204, 205, 304]);
const statusCode = 204;
response.statusCode = statusCode;

// 只有非无体状态码、且有实际响应内容时才写入body
if (!NO_BODY_STATUS.has(statusCode) && preparedBody) {
  response.write(preparedBody);
}
response.end();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:27:06