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

Node.js Express报Header name must be a valid HTTP token错误

错误产生原因

你误用了Express的响应方法:
res.append()的作用是追加HTTP响应头,它的第一个参数必须传入合法的HTTP头字段名(仅允许字母、数字、连字符、下划线等有限字符,不能包含斜杠、冒号这类特殊符号)。你当前直接把拼接好的URL字符串作为第一个参数传入res.append(),Node.js在做HTTP头合法性校验时,发现传入的内容不符合HTTP头命名规范,就抛出了ERR_INVALID_HTTP_TOKEN错误。

正确实现方式

你需要的是把拼接好的URL作为响应体内容返回给请求方,而不是设置响应头,应该使用res.send()方法完成响应,同时注意拼接URL时补上HTTP协议前缀,避免返回的地址缺少协议无法直接使用。
修正后的完整路由代码如下:

const app = require('./app');
const config = require('./config/config');
const logger = require('./config/logger');

let server;
server = app.listen(config.port, config.host, () => {
  logger.info(`Listening to port ${config.port} on host ${config.host}`);
});

// 原有/:sid/:ui路由补充响应逻辑,避免请求挂起
app.get('/:sid/:ui',  (req, res, next) => {
  console.log('OK')
  res.send(`Matched route, sid: ${req.params.sid}, ui: ${req.params.ui}`)
})

app.get('/url',  (req, res, next) => {
  console.log('inside')
  // 拼接完整自托管URL,作为响应体直接返回
  const targetUrl = `http://${config.host}:${config.port}/sid/ui`
  res.send(targetUrl)
})

修正后重启服务,访问http://127.0.0.1:3005/url就会得到你预期的返回结果:

http://127.0.0.1:3005/sid/ui

附Express常用响应方法的区别,避免后续混用:

  • res.append()/res.set():仅用于设置HTTP响应头,参数格式为(头字段名, 头字段值)
  • res.send()/res.json():用于返回业务响应体,也就是接口实际返回给调用方的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:36:20