Node.js - некоторые заголовки не установлены - PullRequest
0 голосов
/ 06 февраля 2020

Как я уже говорил в заголовке, я попытался установить заголовки в node.js, но некоторые из них просто не залипали / перезаписывались.

Вот содержимое моего сервера. js file:

const next = require("next");
const http = require("http");
const url = require("url");
const path = require("path");

const port = process.env.PORT || 3000;
const dev = process.env.NODE_ENV !== "production";

const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
http
 .createServer((req, res) => {
  const parsedUrl = url.parse(req.url, true);
  res.setHeader("X-Content-Type-Options", "nosniff");
  res.setHeader("X-Frame-Options", "DENY");
  res.setHeader("X-XSS-Protection", "1; mode=block");
  res.setHeader(
    "Strict-Transport-Security",
    "max-age=31536000; includeSubDomains; preload"
  );
  res.setHeader("Cache-Control", "public, max-age=31557600");
  handle(req, res, parsedUrl);
})
.listen(port, () => {
  console.log(`listening on PORT ${port}`);
  });
});

Каждый заголовок, кроме Cache-control и x-powered-by (его нет в коде, но я пытался), получает набор. Странно то, что, когда я регистрирую ответ, мои заголовки отключаются:

'x-content-type-options': [ 'X-Content-Type-Options', 'nosniff' ],
'x-frame-options': [ 'X-Frame-Options', 'DENY' ],
'x-xss-protection': [ 'X-XSS-Protection', '1; mode=block' ],
'strict-transport-security': [
  'Strict-Transport-Security',
  'max-age=31536000; includeSubDomains; preload'
],
'cache-control': [ 'Cache-Control', 'public, max-age=31557600' ]

В моем браузере есть заголовки:

HTTP/1.1 200 OK
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Cache-Control: no-store, must-revalidate
X-Powered-By: Next.js
ETag: "1373f-5S13UfVtDhxl5s8GCDKvO1iq/oY"
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Content-Encoding: gzip
Date: Thu, 06 Feb 2020 17:13:04 GMT
Connection: keep-alive
Transfer-Encoding: chunked

Есть идеи, что здесь происходит? Некоторые настройки по умолчанию перезаписывают мой пользовательский?

1 Ответ

1 голос
/ 07 февраля 2020

То, что вы испытываете, указывает c на Далее. js framework.

Относительно 'X-Powered-By', это ожидается согласно Next. js документы

По умолчанию Далее. js добавит x-powered-by к заголовкам запроса. Чтобы отказаться от него, откройте next.config. js и отключите конфигурацию poweredByHeader:

Что касается 'Cache-Control', похоже, он перезаписывается Next. js в режим разработки, как вы можете видеть в исходном коде

sendHTML(req: IncomingMessage, res: ServerResponse, html: string) {
    // In dev, we should not cache pages for any reason.
    res.setHeader('Cache-Control', 'no-store, must-revalidate')
    return super.sendHTML(req, res, html)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...