Не удается избавиться от заголовка X-Powered-By: Express


168

Я работаю на сервере на nodejs с экспресс. Я не могу избавиться от заголовка:

X-Powered-By:Express

Мне было интересно, есть ли способ избавиться от этого заголовка или я должен жить с этим?


@alessioalex этот вопрос имеет больше просмотров (по тем или иным причинам он более популярен), поэтому давайте сделаем другой дубликат этого.
Алексей Левенков

Ответы:


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);чтобы это работало.
Павел Хлобил

2
То же, что app.set («x-powered-by», false);
Harrisunderwork

1
Не работал в 4.15.2. @harrisunderwork с помощью решения app.set()сделал свое дело.
Даниэль В.

54

Просто чтобы прокрутить ответ rjack, вы также можете (необязательно) просто изменить (установить) заголовок X-powered-by на что-то более прохладное / пользовательское, например:

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



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

Иногда ответы вверху не работают. Это мой случай. У меня есть Экспресс 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

1
работал для меня тоже спасибо!
Ферникс

2

Для скрытия, X-Powered By вы можете использовать Node .js Library шлем .

Связь Для этого есть шлем

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

Вы бы включили целую библиотеку для этого?
Моха всемогущий верблюд

да, мы должны использовать библиотеку шлемов. Если вы используете fremework для expressjs, вы можете избежать использования библиотеки с помощью этого кода app.disable ("x-powered-by");
Арджун Кори

2

Ни один из стандартных решений для меня тоже не работает. После долгих поисков я обнаружил, что мы использовали файл маршрутов, где был запущен новый экспресс-экземпляр, который позже был добавлен к первому с помощью 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);

Решением было просто создать новый экспресс. Маршрутизатор вместо целого экземпляра.

const moreRoutes = express.Router();

1

Чтение кода https://github.com/visionmedia/express/blob/master/lib/http.js#L72 заставляет меня думать, что вам придется с этим смириться, поскольку он не выглядит условным.

Если у вас есть интерфейс nginx / apache, вы все равно можете удалить с ним заголовок (с mod_headers для apache и headers-more для nginx)


1
Я думаю, что веб-сервер лучше всего подходит. Это поддерживает лучшую практику.
Доминик

0

removeHeader будет работать только в промежуточном программном обеспечении маршрута, пример coffeescript

fix_headers =  (req, res, next) ->
    res.removeHeader 'X-Powered-By'
    next()

app.get '/posts', fix_headers, (req, res, next) ->
  ...

0

У меня ничего не получалось, кроме этого (нужно добавить еще один параметр):

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

Я использую Express ^ 4.17

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.