私は高速でnodejsでサーバーを実行しています。ヘッダーを取り除くことができないようです:
X-Powered-By:Express
このヘッダーを取り除く方法はあるのか、それとも一緒に暮らさなければならないのでしょうか?
私は高速でnodejsでサーバーを実行しています。ヘッダーを取り除くことができないようです:
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
。@harrisunderworkソリューションを使用app.set()
してトリックを行いました。
rjackの答えに便乗するために、(オプションで)X-powered-byヘッダーを次のようなよりクールなカスタムに変更(設定)することもできます。
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
ソースから(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 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を非表示にするには、Node .js Library ヘルメットを使用できます。
そのためのリンクはヘルメットです
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
私にとっても標準的なソリューションワーカーはありません。多くの検索の結果、新しいエクスプレスインスタンスが開始されたルートファイルを使用していることがわかりました。これは後で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();
コードhttps://github.com/visionmedia/express/blob/master/lib/http.js#L72を読むと、条件付きではないように思われるため、コードを使用する必要があると思います。
nginx / apacheフロントエンドがある場合でも、ヘッダーを削除できます(apacheの場合はmod_headers、nginxの場合はheaders-moreを使用)。
removeHeaderは、ルートミドルウェア、coffeescriptの例でのみ機能します
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...