首页 > 解决方案 > 无法使用 Express.js 添加标题

问题描述

我有一个提供一些静态文件的 Express 应用程序。我能够添加Strict-Transport-Security标头,但是当我尝试添加更多标头时,(X-Frame-OptionsContent-Security-Policy) Express 不会将它们添加到响应中。

我正在使用 Express 4.17.1,我的 server.js 在下面。

const express = require('express');
const path = require('path');
const port = process.env.PORT || 8080;
const app = express();

if (process.env.NODE_ENV !== "development") {
  app.use(function(req, res, next) {
    res.setHeader('Strict-Transport-Security', 'max-age=63072000; includeSubDomains; preload');

    next();
  });
}

app.use(function(req, res, next) {
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('Content-Security-Policy', "frame-src 'none'; " \
    "object-src 'none'; " \
    "script-src 'self'; " \
    "style-src 'self' "
  );

  next();
});

app.use('/dist', express.static(path.join(__dirname, 'dist')));

app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'dist/index.html'));
});

app.listen(port);

标签: node.jsexpress

解决方案


使用\换行符不是有效的语法。例如,您可以使用反引号替换它们+或将Content-Security-Policy标题的值组合成一个字符串。

其余标题都可以使用,请记住,您一次只能使用res.setHeader一个标题。见https://stackoverflow.com/a/40841390/3499115

app.use(function(req, res, next) {
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('Content-Security-Policy', `frame-src 'none'; object-src 'none'; script-src 'self'; style-src 'self';`);

  next();
});

推荐阅读