【问题标题】:Not able to receive a customer header node express无法接收客户标头节点快递
【发布时间】:2021-12-01 13:20:38
【问题描述】:

我正在开发一个 NodeJS+Express 应用程序。我无法接收传入的标头。

我期待来自另一个服务的名为“authKey”的标头。但是当我打印这个时我变得不确定。参考以下代码:

const authKey = req.header('auth-key');
console.log(`authKey:${authKey}`);

输出:

authKey:undefined

我也尝试过使用 npm cors 包,但结果是一样的。

【问题讨论】:

  • 它将进入请求内部或中间。它不会在其他任何地方看到。试试这个:``` app.get('/', (req, res) => { req.header('auth-key') }) ```
  • 也试过这个@ShubhamVerma,没用。这个特定的密钥是否有可能被我公司的防火墙阻止?因为,req.headers 中还有各种其他键,例如主机、用户代理、内容类型。
  • header 更改为 `headers 就可以了

标签: node.js express request-headers custom-headers


【解决方案1】:

有两种方法可以从请求中获取标头

  1. console.log(JSON.stringify(req.headers));

这将打印请求标头中存在的所有标头键值。

  1. const auth = req.headers['auth-key'];

否则,您可以使用它来获取特定的标头值。标头存储在 JavaScript 对象中,标头字符串作为对象键。

【讨论】:

  • 我尝试了这两种方法,但无济于事。看起来 auth-key 标头可能在我公司的防火墙中被阻止了。
  • 您可以尝试将 auth_key 作为标头发送并尝试。有时'-'会被阻塞
【解决方案2】:

这是因为默认情况下所有自定义标头都被阻止的跨域限制。 'authKey' 未在安全标头列表中定义。

1.使用预定义的标题之一:

请参阅此处以获取安全标头列表及其用途,以便您可以使用其中一个安全标头来满足您的目的。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

2。使用 CORS:

跨域资源共享允许我们放松应用到 API 的安全性。

// nodeJS code
var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());

详细了解为什么跨域限制会阻止自定义标头Why does CORS block custom headers by default?

施加默认限制的不是“CORS”。相反,这些限制只是浏览器遵循的默认同源策略的一部分

【讨论】:

  • 我遇到了同样的问题,我正在发送一个自定义标头,而我的 nodejs 应用程序没有接收到它。选项 1 和 2 都解决了我的目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多