helmet简单解读

238 阅读1分钟

Help secure Express apps with various HTTP headers

简单地说,就是给express 加上各种各样的返回头,让你的应用更加安全。helmet内置的http,其实也是单独当成express的middleware来调用,helmet说白了,就是个语法糖,让你更方便快捷地设置返回头。

 var stack = middlewares.reduce(function (result, middlewareName) {
    var middleware = helmet[middlewareName]
    var middlewareOptions = options[middlewareName]
    var isDefault = DEFAULT_MIDDLEWARE.indexOf(middlewareName) !== -1

    if (middlewareOptions === false) {
      return result
    } else if (middlewareOptions === true) {
      middlewareOptions = {}
    }

    if (middlewareOptions != null) {
      return result.concat(middleware(middlewareOptions))
    } else if (isDefault) {
      return result.concat(middleware({}))
    }
    return result
  }, [])

middlewares就是helmet所支持的所有中间件,middlewareOptions为false即不使用该中间件,其他情况就是处理middlewareOptions,初始化middleware塞进数组里面

最后返回helmet方法如下,作为express的中间件。前面说了helmet其实是语法糖🍬,这里可以明显看出来,internalNext先消费我们前面初始化的插件数组,只有当数组为空的时候,才调用express的下一步,即next方法,在消费我们的插件数组时,就是不断地给res设置安全的返回头

return function helmet (req, res, next) {
    var index = 0

    function internalNext () {
      if (arguments.length > 0) { return next.apply(null, arguments) }
    
      var middleware = stack[index]
      if (!middleware) { return next() }
    
      index++
    
      middleware(req, res, internalNext)
    }
    
    internalNext()
}