ฉันกำลังรันเซิร์ฟเวอร์บน nodejs ด้วย express ฉันไม่สามารถกำจัดส่วนหัวได้:
X-Powered-By:Express
ฉันสงสัยว่ามีวิธีใดที่จะกำจัดส่วนหัวนี้หรือฉันต้องอยู่กับมันหรือไม่?
ฉันกำลังรันเซิร์ฟเวอร์บน nodejs ด้วย express ฉันไม่สามารถกำจัดส่วนหัวได้:
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
ไม่ได้ทำงานใน @ วิธีการแก้ปัญหาแฮร์ริสที่ใช้app.set()
ไม่ได้หลอกลวง
เพียงเพื่อ piggy-back กับคำตอบของ rjack คุณยังสามารถ (เป็นทางเลือก) เพียงแค่เปลี่ยน (set) ส่วนหัว 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' ที่เป็นค่าเริ่มต้นดังนั้นคุณไม่จำเป็นต้องปิดการใช้งานและตั้งค่าใหม่
บางทีนี่อาจเห็นได้ชัดสำหรับผู้ใช้ Express ที่มีประสบการณ์มากกว่า แต่สิ่งนี้ใช้ได้สำหรับฉัน:
app.configure(function() {
app.use(function (req, res, next) {
res.removeHeader("X-Powered-By");
next();
});
});
บางครั้งคำตอบที่ด้านบนจะไม่ทำงาน นี่เป็นกรณีของฉัน ฉันมี 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 คุณสามารถใช้โหนด .js ห้องสมุดหมวกกันน็อก
ลิงค์สำหรับหมวกนั่นคือ
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 และส่วนหัว-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