Express.js - Helmet.js等中间件,以及挂载的应用程序?

Express.js - Helmet.js and other middleware, and mounted applications?

在最近的学习项目中,我使用三个 Express.js 应用程序将项目分成更易于管理的部分。

一个应用程序是 "primary" 应用程序,它用于侦听连接。另外两个安装在主应用程序的特定路径上。

是否足以在主应用程序上调用 app.disable('x-powered-by'); 来禁用 X-Powered-By header,或者这是否也需要在每个已安装的应用程序中完成?

同样,我正在研究使用 Helmet.js 来尝试为整个项目添加一些额外的安全性。在主应用程序上包含来自 Helmet.js 的任何中间件是否足够,或者这些是否还需要在安装的应用程序中定义?

我觉得我不太了解某些设置和中间件如何影响已安装的 Express.js 应用程序,希望有更多经验的人进一步解释。

编辑: 在玩 app.disable('x-powered-by') 并检查来自服务器的响应后,如果我不禁用 X-Powered-By header它在主应用程序实例和任何已安装的应用程序实例中。因此,我假设 Helmet.js 中间件以相同的方式运行,但我不是 100% 确定。谁能确认这是否是预期的行为?

你说的都对。

听起来你在做某事比如这个:

var express = require('express')

var mainApp = express()
var miniAppA = express()
var miniAppB = express()

mainApp.use('/a', miniAppA)
mainApp.use('/b', miniAppB)

mainApp.listen(3000)

这是一种不错的处理方式,但是 headers 将在 sub-apps 中被覆盖,如您所见。

您可以使用 Express 4 的路由器功能来缓解这种情况。您可以使用 express.Router() 而不是使用 express() 创建新的 mini-apps。这些是功能较少的 Express 应用程序(例如,它们不会以相同的方式设置 headers)。

这样的事情可能会解决您的问题:

var express = require('express')

var mainApp = express()
var miniAppA = express.Router()
var miniAppB = express.Router()

mainApp.use('/a', miniAppA)
mainApp.use('/b', miniAppB)

mainApp.listen(3000)