Node.js服务器如何在POST请求中读取请求头?
Node.js HTTP服务器无法读取纯数字键名请求头的解决办法
问题场景
服务器代码:
const http = require('http'); const port = 3000; // 假设使用3000端口 http.createServer(function(req, res){ var method = req.method; switch(method) { case 'POST': var header1 = req.headers['1']; console.log('header1 : '+ header1); res.end(); // 补充响应结束逻辑,避免请求挂起 break; } }).listen(port, function(){ console.log(`Server listening on port ${port}`); });
使用PostMan发送POST请求,携带请求头:
key: value 1: 1
控制台输出header1 : undefined,需要正确获取到header1 : 1的结果。
原因
纯数字的请求头键名属于非常规命名,不符合HTTP头字段的常规使用习惯,部分HTTP客户端(如PostMan)或Node.js的http模块解析逻辑会对这类字段做过滤或忽略处理,导致无法读取。
解决方案
方案1:使用符合规范的请求头命名(推荐)
遵循HTTP头字段的常规命名方式,改用字母开头、带连字符的自定义头(如X-Header-1):
- PostMan中设置请求头:
X-Header-1: 1 - 服务器代码修改为:
var header1 = req.headers['x-header-1']; // Node.js会自动将头名转为小写
方案2:验证请求是否正确发送(针对纯数字头)
如果必须使用纯数字键名,先确认请求是否被正确传递:
- 用curl命令替代PostMan测试,确保头字段被正常发送:
如果curl测试能输出curl -X POST -H "1: 1" http://localhost:3000header1 : 1,说明是PostMan的设置问题(部分版本会过滤非常规头字段),需检查PostMan的头字段配置;如果curl也无法获取,说明当前Node.js环境对纯数字头字段有解析限制,建议改用方案1。
内容的提问来源于stack exchange,提问作者sungchul.seo
相关产品推荐
相关产品推荐

