हेडर एक्स-पावर्ड-बाय: एक्सप्रेस से छुटकारा नहीं पा सकता


168

मैं एक्सप्रेस के साथ नोडज पर एक सर्वर चला रहा हूं। मैं शीर्ष लेख से छुटकारा नहीं पा सकता:

X-Powered-By:Express

मैं सोच रहा था कि क्या इस हेडर से छुटकारा पाने का कोई तरीका है या मुझे इसके साथ रहना है?


@alessioalex के इस प्रश्न पर अधिक विचार हैं (जो भी कारण यह अधिक लोकप्रिय है), तो चलिए इसके बजाय इसके दूसरे डुप्लिकेट बनाते हैं।
अलेक्सई लेवेनकोव

जवाबों:


247

एक्सप्रेस में = = 3.0.0rc5:

app.disable('x-powered-by');

यहां एक साधारण मिडलवेयर है जो एक्सप्रेस के पुराने संस्करणों में हेडर को हटाता है:

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});

16
मुझे app.use(app.router);इसे काम करने के लिए पहले रखना था ।
पावेल होलबिल

2
App.set ('x- संचालित-द्वारा', असत्य) के समान;
१३:१६

1
में काम नहीं किया 4.15.2। @harrisunderwork समाधान का उपयोग करके app.set()चाल चली गई ।
डैनियल डब्ल्यू।

54

Rjack के जवाब पर सिर्फ गुल्लक के लिए, आप भी (वैकल्पिक रूप से) एक्स-पावर्ड-हेडर से इस तरह के कुछ कूलर / कस्टम को बदल सकते हैं (सेट):

app.use(function (req, res, next) {
  res.header("X-powered-by", "Blood, sweat, and tears")
  next()
})

50

एक्सप्रेस v3.0.0rc5 के अनुसार, X-Powered-Byहेडर को निष्क्रिय करने के लिए समर्थन इसमें बनाया गया है:

var express = require('express');

var app = express();
app.disable('x-powered-by');


10

यहां एक आसान मिडलवेयर है जिसे आप एक्स-पावर्ड-बाय-स्वैप कर सकते हैं:

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 सेट करना डिफ़ॉल्ट 'एक्सप्रेस' को ओवरराइड करेगा, इसलिए आपको दोनों को अक्षम करने और एक नया मान सेट करने की आवश्यकता नहीं है।


3

शायद यह अधिक अनुभवी एक्सप्रेस उपयोगकर्ताओं के लिए स्पष्ट हो सकता है, लेकिन केवल इसने मेरे लिए काम किया:

app.configure(function() {
    app.use(function (req, res, next) {
        res.removeHeader("X-Powered-By");
        next();
    });
});

3

कभी-कभी शीर्ष पर उत्तर काम नहीं करते हैं। यह मेरा मामला है। मेरे पास एक्सप्रेस 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();
});

एक्सप्रेस संस्करण 4.16.3 के लिए भी काम किया। कोई और उपाय काम नहीं आया।
Xyroid

मेरे लिए भी काम किया धन्यवाद!
फर्निक्स

2

छुपाने के लिए, X- Powered by आप नोड .js लाइब्रेरी हेलमेट का उपयोग कर सकते हैं ।

इसके लिए लिंक हेलमेट है

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());

क्या आप इसके लिए एक पूरी लाइब्रेरी शामिल करेंगे?
सर्वशक्तिमान ऊंट

हाँ, हमें हेलमेट लाइब्रेरी का उपयोग करना होगा। यदि आप एक्सप्रेसज फ्रीमवर्क का उपयोग कर रहे हैं, तो आप इस कोड द्वारा पुस्तकालय से बच सकते हैं appisable ("x- संचालित-द्वारा");
अर्जुन कोरी

2

मेरे लिए कोई भी मानक समाधान कार्यकर्ता नहीं है। बहुत खोज के बाद मुझे पता चला कि हमने एक रूट फ़ाइल का उपयोग किया है जहाँ एक नया एक्सप्रेस इंस्टेंस शुरू किया गया था, जिसे बाद में app.use का उपयोग करके पहले जोड़ा गया था। केवल इस नए एक्सप्रेस उदाहरण के लिए एक्स-पावर्ड बाय हेडर में मार्गों के लिए मौजूद था।

मुद्दे का सरल दृष्टिकोण:

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();

1

कोड को पढ़कर https://github.com/visionmedia/express/blob/master/lib/http.js#L72 मुझे लगता है कि आपको इसके साथ रहना होगा क्योंकि यह सशर्त नहीं लगता है।

यदि आपके पास एक nginx / apache फ्रंटेंड है, तो आप इसके साथ हेडर को हटा सकते हैं (Apache के लिए mod_headers और nginx के लिए हेडर-अधिक)


1
मुझे लगता है कि वेब सर्वर का दृष्टिकोण वैसे भी सबसे अच्छा है। यह एक सर्वोत्तम अभ्यास का समर्थन करता है।
डोमिनिक

0

removeHeader केवल रूट मिडलवेयर, कॉफ़ीस्क्रिप्ट उदाहरण में काम करेगा

fix_headers =  (req, res, next) ->
    res.removeHeader 'X-Powered-By'
    next()

app.get '/posts', fix_headers, (req, res, next) ->
  ...

0

इसमें से किसी ने भी मेरे लिए काम नहीं किया, इसके अलावा (आपको एक और पैरामीटर जोड़ने की आवश्यकता है):

app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))

मैं एक्सप्रेस ^ 4.17 का उपयोग कर रहा हूं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.