Saya menjalankan server di nodejs dengan express. Sepertinya saya tidak bisa menghilangkan tajuk:
X-Powered-By:Express
Saya bertanya-tanya apakah ada cara untuk menyingkirkan tajuk ini atau apakah saya harus hidup dengannya?
Saya menjalankan server di nodejs dengan express. Sepertinya saya tidak bisa menghilangkan tajuk:
X-Powered-By:Express
Saya bertanya-tanya apakah ada cara untuk menyingkirkan tajuk ini atau apakah saya harus hidup dengannya?
Jawaban:
In Express> = 3.0.0rc5:
app.disable('x-powered-by');
Berikut adalah middleware sederhana yang menghapus header di versi Express sebelumnya:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
app.use(app.router);
berfungsi.
4.15.2
. Solusi @harrisunderwork menggunakan app.set()
melakukan trik.
Hanya untuk membonceng jawaban rjack, Anda juga bisa (secara opsional) hanya mengubah (mengatur) header X-powered-by menjadi sesuatu yang jauh lebih keren / ubahsuaian seperti ini:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
Dari sumbernya ( http://expressjs.com/en/api.html#app.set ). Di Express 4.X cukup atur aplikasi menggunakan garis di bawah ini;
app.set('x-powered-by', false) // hide x-powered-by header!
Berikut ini adalah middleware berguna yang dapat Anda singgahi untuk menukar 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
Mengatur X-Powered oleh dalam hal ini akan menimpa default 'Express', sehingga Anda tidak perlu menonaktifkan DAN mengatur nilai baru.
Terkadang jawaban di atas tidak berhasil. Ini kasus saya. Saya memiliki Express 4.17.1 dan tidak ada satu jawaban pun yang tidak berfungsi. Jadi saya menemukan solusi saya sendiri:
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();
});
Untuk Menyembunyikan, X-Powered By Anda dapat menggunakan helm Node .js Library .
Tautan Untuk itu adalah helm
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
Tidak ada pekerja solusi standar untuk saya juga. Setelah banyak pencarian saya menemukan bahwa kami menggunakan file rute tempat instance express baru dimulai, yang kemudian ditambahkan ke yang pertama dengan menggunakan app.use. Hanya untuk rute dalam instance ekspres baru ini header X-Powered-By hadir.
Pandangan sederhana tentang masalah:
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);
Solusi hanya untuk membuat ekspres baru. Rute bukannya seluruh contoh.
const moreRoutes = express.Router();
Membaca kode https://github.com/visionmedia/express/blob/master/lib/http.js#L72 membuat saya berpikir bahwa Anda harus hidup dengan itu karena sepertinya tidak kondisional.
Jika Anda memiliki frontend nginx / apache Anda masih dapat menghapus header dengan itu (dengan mod_headers untuk apache dan header-lebih untuk nginx)
removeHeader hanya akan berfungsi di rute middleware, contoh coffeescript
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
Semua ini tidak berfungsi untuk saya, kecuali ini (Anda perlu menambahkan parameter lain):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
Saya menggunakan Express ^ 4.17