我正在使用express运行nodejs上的服务器。我似乎无法摆脱标题:
X-Powered-By:Express
我想知道是否有办法摆脱这个标题,还是我不得不忍受它?
答案 0 :(得分:243)
在Express> = 3.0.0rc5:
app.disable('x-powered-by');
这是一个简单的中间件,它删除了早期版本的Express中的标题:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
答案 1 :(得分:51)
只是为了捎带rjack的答案,你也可以(可选)将X-powered-by标题更改(设置)为更冷/定制的东西:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
答案 2 :(得分:17)
从源头(http://expressjs.com/en/api.html#app.set)。在Express 4.X中,只需使用下面的行设置应用程序;
app.set('x-powered-by', false) // hide x-powered-by header!
答案 3 :(得分: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将覆盖默认的“Express”,因此您无需同时禁用AND设置新值。
答案 4 :(得分:3)
对于经验丰富的Express用户来说,这可能是显而易见的,但只有这对我有用:
app.configure(function() {
app.use(function (req, res, next) {
res.removeHeader("X-Powered-By");
next();
});
});
答案 5 :(得分: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();
});
答案 6 :(得分:2)
我都不是标准解决方案工作者。经过大量搜索,我发现我们使用了一个路由文件,在该文件中启动了一个新的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();
答案 7 :(得分:1)
阅读代码https://github.com/visionmedia/express/blob/master/lib/http.js#L72让我觉得你必须忍受它,因为它似乎没有条件。
如果你有一个nginx / apache前端,你仍然可以用它删除标题(使用mod_headers for apache和headers-more for nginx)
答案 8 :(得分:1)
对于隐藏,X-Powered By您可以使用Node .js Library 头盔。
链接就是helmet
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
答案 9 :(得分:0)
removeHeader仅适用于路由中间件,coffeescript示例
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
答案 10 :(得分:0)
除了这个(您需要添加另一个参数)之外,这些都不对我有用:
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
我正在使用Express ^ 4.17
答案 11 :(得分:0)
注意:答案分散在各个帖子中,这是一个汇编,加上我自己的一些补充。他们都经过测试。
注释2 :缺少一些重要的东西:如果您正在使用Angular,React或webpack开发服务器等开发服务器检查前端中的标头,则仍然会看到标头。这是因为webpack-dev-server确实是Express服务器,并且您看到的是该应用程序提供的标头。如果使用以下选项之一,则后端将不会发送标头。
有很多方法可以做到这一点。
"X-powered-by"
。import express from 'express'
const app = express()
app.disable('x-powered-by')
// app.use(...)
2)使用中间件在每个请求上将其删除:
X-powered-by
键import express from 'express'
const app = express()
app.use(function (req, res, next) {
res.removeHeader("X-Powered-By");
next();
});
X-powered-by
的值更改为其他值import express from 'express'
const app = express()
app.use(function (req, res, next) {
res.header("X-powered-by", "not-Express")
next()
})
3)使用helmet将其删除,并配置10个其他HTTP推荐的标头(“ 这不是灵丹妙药,但可以提供帮助!”)
import express from 'express'
import helmet from 'helmet'
const app = express()
app.use(helmet())
X-powered-by
import express from 'express'
import helmet from 'helmet'
const app = express()
app.use(helmet.hidePoweredBy());
与“注释2”有关:
如果您正在使用webpack-dev-server进行热重装,则仍会看到此标头。那是因为它使用的是Express服务器,因此标头来自于它,而不是来自您正在配置的后端Express。
即使没有设置webpack-dev-server,主要前端框架中使用的一些样板工具(如crate-react-app)仍将在后台使用webpack-dev-server。
例如,如果您检查CRA中的start
脚本(在执行“ npm start”时被调用):