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


168

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

X-Powered-By:Express

我想知道是否有任何方法可以摆脱此标头,还是我必须忍受它?


@alessioalex这个问题有更多的观点(无论出于何种原因它都更受欢迎),因此让我们对该问题进行其他重复。
阿列克谢·莱文科夫2014年

Answers:


247

在Express> = 3.0.0rc5中:

app.disable('x-powered-by');

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

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});

16
我必须先放置它才能 app.use(app.router);工作。
Pavel Hlobil'1

2
与app.set('x-powered-by',false)相同;
harrisunderwork

1
没在工作4.15.2。@harrisunderwork解决方案使用app.set()了技巧。
Daniel W.

54

只是为了r带rjack的答案,您还可以(可选)将X-powered-by标头更改(设置)为更酷/更自定义的内容,如下所示:

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

50

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

var express = require('express');

var app = express();
app.disable('x-powered-by');


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

在这种情况下,设置X-Powered by将覆盖默认的“ Express”,因此您无需同时禁用和设置新值。


3

也许这对于经验丰富的Express用户可能是显而易见的,但是只有这样对我有用:

app.configure(function() {
    app.use(function (req, res, next) {
        res.removeHeader("X-Powered-By");
        next();
    });
});

3

有时,最上方的答案无效。这是我的情况。我有Express 4.17.1,没有一个答案不起作用。因此,我发明了自己的解决方案:

let app = express();

app.use((req, res, next) => {
  const send = res.send;
  res.send = (data) => {
    res.removeHeader('X-Powered-By');
    return send.call(res, data);
  };

  next();
});

也适用于Express版本4.16.3。没有其他解决方案。
Xyroid

也为我工作了,谢谢!
Fernix

2

对于隐藏,您可以使用Node .js库头盔

那个链接是头盔

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());

您会为此提供一个完整的库吗?
全能的骆驼Moha

是的,我们必须使用头盔库。如果您使用expressjs fremework,则可以通过此代码app.disable(“ x-powered-by”)避免使用库。
arjun kori

2

我也没有标准解决方案工作者。经过大量搜索,我发现我们使用了一个路由文件,在该文件中启动了一个新的Express实例,该实例随后通过使用app.use添加到了第一个实例中。仅针对此新快递实例中的路由,存在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);

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

const moreRoutes = express.Router();



0

除了这个(您需要添加另一个参数),所有这些对我都不起作用:

app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))

我正在使用Express ^ 4.17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.