Я работаю на сервере на nodejs с экспресс. Я не могу избавиться от заголовка:
X-Powered-By:Express
Мне было интересно, есть ли способ избавиться от этого заголовка или я должен жить с этим?
Я работаю на сервере на nodejs с экспресс. Я не могу избавиться от заголовка:
X-Powered-By:Express
Мне было интересно, есть ли способ избавиться от этого заголовка или я должен жить с этим?
Ответы:
В Express> = 3.0.0rc5:
app.disable('x-powered-by');
Вот простое промежуточное ПО, которое удаляет заголовок в более ранних версиях Express:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
app.use(app.router);
чтобы это работало.
4.15.2
. @harrisunderwork с помощью решения app.set()
сделал свое дело.
Просто чтобы прокрутить ответ rjack, вы также можете (необязательно) просто изменить (установить) заголовок X-powered-by на что-то более прохладное / пользовательское, например:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
Начиная с Express v3.0.0rc5, поддержка отключения X-Powered-By
заголовка встроена:
var express = require('express');
var app = express();
app.disable('x-powered-by');
Из источника ( http://expressjs.com/en/api.html#app.set ). В Express 4.X просто установите приложение, используя строку ниже;
app.set('x-powered-by', false) // hide x-powered-by header!
Вот удобное промежуточное программное обеспечение, которое вы можете использовать для замены 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', поэтому вам не нужно одновременно отключать И устанавливать новое значение.
Иногда ответы вверху не работают. Это мой случай. У меня есть Экспресс 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();
});
Для скрытия, X-Powered By вы можете использовать Node .js Library шлем .
Связь Для этого есть шлем
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
Ни один из стандартных решений для меня тоже не работает. После долгих поисков я обнаружил, что мы использовали файл маршрутов, где был запущен новый экспресс-экземпляр, который позже был добавлен к первому с помощью 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();
Чтение кода https://github.com/visionmedia/express/blob/master/lib/http.js#L72 заставляет меня думать, что вам придется с этим смириться, поскольку он не выглядит условным.
Если у вас есть интерфейс nginx / apache, вы все равно можете удалить с ним заголовок (с mod_headers для apache и headers-more для nginx)
removeHeader будет работать только в промежуточном программном обеспечении маршрута, пример coffeescript
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
У меня ничего не получалось, кроме этого (нужно добавить еще один параметр):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
Я использую Express ^ 4.17