无法摆脱标题X-Powered-By:Express

tyr*_*ter 166 javascript webserver http-headers node.js express

我正在使用express在nodejs上运行服务器.我似乎无法摆脱标题:

X-Powered-By:Express
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法摆脱这个标题或我是否必须忍受它?

Gia*_*omo 245

在Express> = 3.0.0rc5中:

app.disable('x-powered-by');
Run Code Online (Sandbox Code Playgroud)

这是一个简单的中间件,删除早期版本的Express中的标头:

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});
Run Code Online (Sandbox Code Playgroud)

  • 我不得不把它放在`app.use(app.router)之前;`让它工作. (16认同)
  • 与app.set相同('x-powered-by',false); (2认同)
  • 在`4.15.2` 中不起作用。使用`app.set()` 的@harrisunderwork 解决方案成功了。 (2认同)

Chr*_*ott 51

只是为了捎带rjack的答案,你也可以(可选)将X-powered-by标题更改(设置)为更冷/定制的东西,如下所示:

app.use(function (req, res, next) {
  res.header("X-powered-by", "Blood, sweat, and tears")
  next()
})
Run Code Online (Sandbox Code Playgroud)


hal*_*ark 49

从Express v3.0.0rc5开始,X-Powered-By内置了对禁用标头的支持:

var express = require('express');

var app = express();
app.disable('x-powered-by');
Run Code Online (Sandbox Code Playgroud)


efk*_*kan 19

来自源(http://expressjs.com/en/api.html#app.set).在Express 4.X中,只需使用下面的行设置应用程序;

app.set('x-powered-by', false) // hide x-powered-by header!
Run Code Online (Sandbox Code Playgroud)


pap*_*boy 10

这是一个方便的中间件,您可以插入以换出X-Powered-By:

function customHeaders( req, res, next ){
  // Switch off the default 'X-Powered-By: Express' header
  app.disable( 'x-powered-by' );

  // OR set your own header here
  res.setHeader( 'X-Powered-By', 'Awesome App v0.0.1' );

  // .. other headers here

  next()
}

app.use( customHeaders );

// ... now your code goes here
Run Code Online (Sandbox Code Playgroud)

在这种情况下设置X-Powered将覆盖默认的"Express",因此您无需同时禁用AND设置新值.


小智 5

标准解决方案也不适合我。经过大量搜索后,我发现我们使用了一个路由文件,其中启动了一个新的 Express 实例,后来使用 app.use 将其添加到第一个实例中。仅对于这个新的 Express 实例中的路由,存在 X-Powered-By 标头。

简单化的看待问题:

const app = express();
app.disable("x-powered-by");
app.get("/ping", (req, res) => res.send("Pong")); // <-- no X-Powered-By header

const moreRoutes = express();
moreRoutes.get("/ping", (req, res) => res.send("Pong")); // <-- X-Powered-By header still present

app.use("/api/v2", moreRoutes);
Run Code Online (Sandbox Code Playgroud)

解决方案只是创建一个新的express.Router而不是整个实例。

const moreRoutes = express.Router();
Run Code Online (Sandbox Code Playgroud)