我正在使用express在nodejs上运行服务器。我似乎无法摆脱标题:
X-Powered-By:Express
我想知道是否有任何方法可以摆脱此标头,还是我必须忍受它?
我正在使用express在nodejs上运行服务器。我似乎无法摆脱标题:
X-Powered-By:Express
我想知道是否有任何方法可以摆脱此标头,还是我必须忍受它?
Answers:
在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()
了技巧。
从源(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.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);
解决方案只是创建一个新的express.Router而不是整个实例。
const moreRoutes = express.Router();
阅读代码https://github.com/visionmedia/express/blob/master/lib/http.js#L72使我认为您将不得不使用它,因为它似乎不是有条件的。
如果您有Nginx / apache前端,您仍然可以删除标头(对于Apache和modsheaders,标头-对于Nginx,更多)
removeHeader仅在路由中间件中起作用,coffeescript示例
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...