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

Node.js服务器(Cloudflare隧道)无法获取client-time请求头

问题

我正在开发一款依赖client-time请求头判断营业时间的Node.js服务器,但无法从传入的HTTP请求中获取该请求头。已确认cURL请求中已发送该请求头,但服务器并未捕获到。简化后的服务器代码如下:

const server = http.createServer((req, res) => {
  const clientTime = req.headers['client-time'];
  console.log('Client Time:', clientTime);

  // ... (rest of the server logic)
});

已执行的排查操作:

  • 检查cURL请求确保client-time头已发送
  • 查看服务器日志验证是否捕获到该请求头
  • 检查服务器代码确认无语法或逻辑问题
  • 考虑防火墙或安全设置的潜在干扰
可能的解决方向

1. 排查代理/中间件的过滤行为

如果服务器部署在反向代理(如Nginx)之后,或者使用了Express/Koa等框架的中间件,可能存在自定义请求头被过滤的情况:

  • 若使用Nginx,需确保配置允许传递自定义请求头;如果头名包含下划线则需开启underscores_in_headers on;(client-time为连字符格式无需额外配置,但需确认代理未拦截未知头)
  • 若使用Web框架中间件,检查是否有安全类中间件(如helmet)过滤了未知请求头,需将client-time添加到允许列表中

2. 再次验证cURL请求的正确性

可再次确认curl命令的格式是否准确,避免拼写或格式错误:

curl -H "client-time: 2024-05-20T14:30:00" http://your-server-url

确保头名连字符正确、值的格式符合HTTP规范(无非法字符)

3. 调整Node.js HTTP服务器的头解析限制

Node.js的http模块默认对请求头的大小和数量有限制,若client-time头因长度或总头数被截断,可修改服务器配置:

const server = http.createServer({
  maxHeaderSize: 16384, // 调整为16KB(默认8KB)
  maxHeadersCount: 300 // 调整为300(默认200)
}, (req, res) => {
  const clientTime = req.headers['client-time'];
  console.log('Client Time:', clientTime);
  // ...
});

4. 检查代码中是否有请求头被篡改

排查服务器代码中是否有其他逻辑(如自定义中间件)在读取req.headers之前修改或删除了client-time头,例如某些全局中间件可能会清理未知请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:33:31