Я запускаю сервер на nodejs з express. Я, здається, не можу позбутися заголовка:
X-Powered-By:Express
Мені було цікаво, чи є спосіб позбутися цього заголовка чи мені з цим потрібно жити?
Я запускаю сервер на nodejs з express. Я, здається, не можу позбутися заголовка:
X-Powered-By: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 на щось набагато крутіше / звичайніше, як це:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
З джерела ( 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 за допомогою "Експрес", за замовчуванням буде замінено, тому вам не потрібно обидва вимикання ТА встановлювати нове значення.
Іноді відповіді вгорі не працюють. Це моя справа. У мене Експрес 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);
Рішенням було просто створити новий express.Router замість цілого екземпляра.
const moreRoutes = express.Router();
Читання коду https://github.com/visionmedia/express/blob/master/lib/http.js#L72 змушує мене думати, що вам доведеться жити з ним, оскільки це, здається, не є умовним.
Якщо у вас frontend nginx / apache, ви все одно можете видалити заголовок з ним (з mod_headers для apache та заголовками - більше для 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