Uruchamiam serwer na nodejs z express. Nie mogę pozbyć się nagłówka:
X-Powered-By:Express
Zastanawiałem się, czy jest sposób, aby pozbyć się tego nagłówka, czy muszę z tym żyć?
Uruchamiam serwer na nodejs z express. Nie mogę pozbyć się nagłówka:
X-Powered-By:Express
Zastanawiałem się, czy jest sposób, aby pozbyć się tego nagłówka, czy muszę z tym żyć?
Odpowiedzi:
W Express> = 3.0.0rc5:
app.disable('x-powered-by');
Oto proste oprogramowanie pośredniczące, które usuwa nagłówek we wcześniejszych wersjach Express:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
app.use(app.router);
, aby działał.
4.15.2
. Rozwiązanie @harrisunderwork za pomocą rozwiązania załatwiło sprawę app.set()
.
Aby skorzystać z odpowiedzi rjacka, możesz również (opcjonalnie) po prostu zmienić (ustawić) nagłówek X-powered-by na coś znacznie fajniejszego / niestandardowego, takiego jak ten:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
Ze źródła ( http://expressjs.com/en/api.html#app.set ). W Express 4.X wystarczy ustawić aplikację za pomocą poniższego wiersza;
app.set('x-powered-by', false) // hide x-powered-by header!
Oto przydatne oprogramowanie pośredniczące, do którego możesz wpaść, aby wymienić 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
Ustawienie X-Powered by w tym przypadku spowodowałoby przesłonięcie domyślnego „Express”, więc nie trzeba jednocześnie wyłączać ORAZ ustawiać nowej wartości.
Czasami odpowiedzi u góry nie działają. To jest moja sprawa. Mam Express 4.17.1 i żadna odpowiedź nie działa. Więc wymyśliłem własne rozwiązanie:
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();
});
Aby ukryć, X-Powered By możesz użyć hełmu Node .js Library .
Link do tego jest hełmem
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
Żadne ze standardowych rozwiązań również mi nie odpowiada. Po długich poszukiwaniach dowiedziałem się, że użyliśmy pliku routingu, w którym uruchomiono nową instancję ekspresową, która została później dodana do pierwszej za pomocą app.use. Tylko dla tras w tym nowym wystąpieniu ekspresowym obecny był nagłówek X-Powered-By.
Uproszczone spojrzenie na problem:
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);
Rozwiązaniem było po prostu utworzenie nowego express.Router zamiast całej instancji.
const moreRoutes = express.Router();
Czytanie kodu https://github.com/visionmedia/express/blob/master/lib/http.js#L72 sprawia, że myślę, że będziesz musiał z nim żyć, ponieważ nie wydaje się to być warunkowe.
Jeśli masz nakładkę nginx / apache, nadal możesz usunąć nagłówek za jej pomocą (z mod_headers dla apache i headers-more dla nginx)
removeHeader będzie działać tylko w oprogramowaniu pośredniczącym tras, przykład skryptu Coffeescript
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
Nic z tego nie działało dla mnie, z wyjątkiem tego (musisz dodać kolejny parametr):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
Używam Express ^ 4.17