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

AJAX请求携带的自定义header无法被NodeJS/ExpressJS后端识别如何解决

问题排查与解决方法

1. 修复CORS预检请求配置

  • 携带Authorization等非简单请求头的请求会触发浏览器OPTIONS预检请求,服务端必须正确响应预检请求,浏览器才会将实际请求的自定义头发送到后端。
  • 如果使用cors中间件处理跨域,调整配置显式允许Authorization头:
const cors = require('cors');
app.use(cors({
  origin: '*', // 生产环境请替换为实际前端域名
  allowedHeaders: ['Content-Type', 'Authorization']
}));
  • 未使用cors中间件的场景,手动处理OPTIONS请求:
app.options('*', (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  res.sendStatus(200);
});

2. 调整前端AJAX请求配置

  • 提交FormData类型数据时,jQuery默认会自动处理数据并修改请求头,可能导致自定义头丢失,补充两个配置项:
$.ajax({
  type: "POST",
  url: "/foo",
  headers: {"authorization": "Bearer 12345"},
  data: formData,
  dataType: "json",
  encode: true,
  processData: false, // 禁止jQuery处理FormData
  contentType: false, // 禁止jQuery自动设置Content-Type头
})

3. 排查反向代理过滤规则

  • 如果Node服务前部署了Nginx、网关等反向代理服务,部分代理会默认过滤非标准请求头,可以修改代理配置强制转发Authorization头,以Nginx为例:
proxy_pass_request_headers on;
proxy_set_header Authorization $http_authorization;

4. 本地调试确认问题

  • 在服务端所有路由最前面添加请求头日志,确认自定义头是否真的没有到达Node服务:
app.use((req, res, next) => {
  console.log('全量请求头:', req.headers);
  next();
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:18:03