ヘッダーX-Powered-By:Expressを削除できません


168

私は高速でnodejsでサーバーを実行しています。ヘッダーを取り除くことができないようです:

X-Powered-By:Express

このヘッダーを取り除く方法はあるのか、それとも一緒に暮らさなければならないのでしょうか?


@alessioalexこの質問はより多くのビューを持っています(それがより人気がある理由は何であれ)、代わりにこれの他の複製を作成しましょう。
Alexei Levenkov 2014年

回答:


247

Express> = 3.0.0rc5の場合:

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

以下は、以前のバージョンのExpressでヘッダーを削除する単純なミドルウェアです。

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

16
それが機能するapp.use(app.router);ためには、前 に配置する必要がありました。
Pavel Hlobil、2012年

2
app.set( 'x-powered-by'、false);と同じです。
Harrisunderwork 2016年

1
では機能しませんでした4.15.2。@harrisunderworkソリューションを使用app.set()してトリックを行いました。
ダニエルW.

54

rjackの答えに便乗するために、(オプションで)X-powered-byヘッダーを次のようなよりクールなカスタムに変更(設定)することもできます。

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

50

Express v3.0.0rc5以降、X-Powered-Byヘッダーの無効化のサポートが組み込まれています。

var express = require('express');

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


10

以下は、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」が上書きされるため、無効にすることも、新しい値を設定することも必要ありません。


3

多分これはより熟練したExpressユーザーには明白かもしれませんが、これだけが私にとってうまくいきました:

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

3

上部の回答が機能しない場合があります。これは私の場合です。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();
});

Expressバージョン4.16.3でも動作しました。他の解決策は機能しませんでした。
Xyroid

1
ありがとうございます!
Fernix

2

X-Powered Byを非表示にするには、Node .js Library ヘルメットを使用できます。

そのためのリンクはヘルメットです

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

このためのライブラリ全体を含めますか?
Moha全能のラクダ

はい、ヘルメットライブラリを使用する必要があります。expressjsfremeworkを使用している場合は、このコードでライブラリを回避できます。app.disable( "x-powered-by");
arjun kori

2

私にとっても標準的なソリューションワーカーはありません。多くの検索の結果、新しいエクスプレスインスタンスが開始されたルートファイルを使用していることがわかりました。これは後でapp.useを使用して最初のインスタンスに追加されました。この新しいExpressインスタンスのルートにのみ、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();

1

コードhttps://github.com/visionmedia/express/blob/master/lib/http.js#L72を読むと、条件付きではないように思われるため、コードを使用する必要があると思います。

nginx / apacheフロントエンドがある場合でも、ヘッダーを削除できます(apacheの場合はmod_headers、nginxの場合はheaders-moreを使用)。


1
とにかく、Webサーバーのアプローチが最善だと思います。これはベストプラクティスをサポートします。
ドミニク

0

removeHeaderは、ルートミドルウェア、coffeescriptの例でのみ機能します

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' }))

Express ^ 4.17を使用しています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.