expressjs: отключение заголовка x-powered-by - PullRequest
1 голос
/ 22 апреля 2020

Согласно express документам (и SO), я могу использовать app.disable('x-powered-by'), чтобы избавиться от заголовка X-Powered-By: Express. Документы для app.disable здесь здесь , а таблицу переключаемых настроек можно увидеть здесь .

Вот простой express сервер:

// src/server.js
import express from 'express'
import logger from 'morgan'
import router from './routes/index.js'

export const createServer = () => {
  const app = express()

  app.disable('x-powered-by')

  app.use(logger('dev'))
  app.use(express.json())
  app.use(express.urlencoded({ extended: true }))

  app.use(router)
  return app
}

const app = createServer()

export default app

// src/index.js
import { SERVER_PORT, SERVER_ORIGIN } from './config/index.js'
import app from './server.js'

const port = parseInt(SERVER_PORT, 10)

const server = app.listen(port, () => {
  console.info(`[Server] ${SERVER_ORIGIN}.`)
})

export default server

Как видно выше, я использую app.disable('x-powered-by') сразу после создания приложения. Но когда я запускаю curl, заголовок все еще присутствует:

$ curl localhost:5000 -v

*   Trying 127.0.0.1:5000...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.65.3
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 16
< ETag: W/"10-/VnJyQBB0+b7i4NY83P42KKVWsM"
< Date: Wed, 22 Apr 2020 12:08:35 GMT
< Connection: keep-alive
<
* Connection #0 to host localhost left intact
{"message":"ok"}

Я попытался изменить заглавные буквы (app.disable('X-Powered-By')), но это ничего не изменило. Что мне здесь не хватает?

Ответы [ 3 ]

1 голос
/ 22 апреля 2020

Проблема заключается в 'routes/index.js':

import Router from 'express'

const router = Router()

Это не создает маршрутизатор, оно создает новое приложение с собственными настройками.

Правильно было бы:

import express from 'express'

const router = express.Router()
0 голосов
/ 22 апреля 2020

Проблема в том, что Router() экземпляры не поддерживают глобальные настройки app и вместо этого возвращаются к значениям по умолчанию. В его нынешнем виде заголовок должен быть отключен вручную на каждом Router() экземпляре:

const router = Router()
router.disable('x-powered-by')

Github Issue .

Minimal repo to воспроизведите проблему.

0 голосов
/ 22 апреля 2020

попробуйте также

app.set('x-powered-by', false)

Это сработало для меня.


Попробуйте также app.disable('x-powered-by') после const app = createServer()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...