헤더 X-Powered-By : Express를 제거 할 수 없습니다 :


168

Express로 nodejs에서 서버를 실행 중입니다. 헤더를 제거 할 수없는 것 같습니다.

X-Powered-By:Express

이 헤더를 제거 할 수있는 방법이 있는지 궁금하거나 그와 함께 살아야합니까?


@alessioalex이 질문에는 더 많은 견해가 있습니다 (어떤 이유로 든 더 인기가 있습니다). 대신 이것의 다른 복제본을 만들어 봅시다.
Alexei Levenkov

답변:


247

Express> = 3.0.0rc5에서 :

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

다음은 이전 버전의 Express에서 헤더를 제거하는 간단한 미들웨어입니다.

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});

16
나는 app.use(app.router);그것이 작동 하기 전에 그것을 배치해야 했다.
Pavel Hlobil

2
app.set과 동일 ( 'x-powered-by', false);
harrisunderwork

1
에서 작동하지 않았습니다 4.15.2. @harrisunderwork 솔루션을 사용 app.set()하여 트릭을 수행했습니다.
Daniel W.

54

rjack의 답변을 피기 백하기 위해 X-powered-by 헤더를 다음과 같이 훨씬 더 시원하고 사용자 정의 할 수 있습니다 (선택 사항).

app.use(function (req, res, next) {
  res.header("X-powered-by", "Blood, sweat, and tears")
  next()
})

50

Express v3.0.0rc5부터는 X-Powered-By헤더 비활성화 지원 이 내장되어 있습니다.

var express = require('express');

var app = express();
app.disable('x-powered-by');


10

다음은 X-Powered-By를 교체하기 위해 사용할 수있는 편리한 미들웨어입니다.

function customHeaders( req, res, next ){
  // Switch off the default 'X-Powered-By: Express' header
  app.disable( 'x-powered-by' );

  // OR set your own header here
  res.setHeader( 'X-Powered-By', 'Awesome App v0.0.1' );

  // .. other headers here

  next()
}

app.use( customHeaders );

// ... now your code goes here

이 경우 X-Powered by를 설정하면 기본 'Express'가 무시되므로 새 값을 비활성화하거나 설정할 필요가 없습니다.


3

어쩌면 이것은 더 노련한 Express 사용자에게는 분명 할 수 있지만 이것이 나에게 효과적이었습니다.

app.configure(function() {
    app.use(function (req, res, next) {
        res.removeHeader("X-Powered-By");
        next();
    });
});

3

때때로 상단의 답변이 작동하지 않습니다. 이것은 나의 경우이다. Express 4.17.1이 있는데 응답이 없습니다. 그래서 나는 내 자신의 해결책을 발명했다.

let app = express();

app.use((req, res, next) => {
  const send = res.send;
  res.send = (data) => {
    res.removeHeader('X-Powered-By');
    return send.call(res, data);
  };

  next();
});

Express 버전 4.16.3에서도 작동했습니다. 다른 솔루션은 효과가 없었습니다.
Xyroid

나에게도 감사했습니다!
Fernix

2

숨기기, X-Powered By의 경우 Node .js 라이브러리 헬멧을 사용할 수 있습니다 .

그 링크는 헬멧입니다

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());

이것에 대한 전체 라이브러리를 포함 하시겠습니까?
전능 한 낙타 Moha

예, 헬멧 라이브러리를 사용해야합니다. expressjs fremework를 사용하는 경우이 코드를 사용하여 라이브러리를 피할 수 있습니다. app.disable ( "x-powered-by");
arjun kori

2

표준 솔루션 중 어느 것도 나를 위해 일하지 않습니다. 많은 검색을 한 후 새로운 급행 인스턴스가 시작된 경로 파일을 사용했으며 나중에 app.use를 사용하여 첫 번째에 추가했습니다. 이 새로운 급행 인스턴스의 경로에 대해서만 X-Powered-By 헤더가있었습니다.

문제에 대한 간단한 견해 :

const app = express();
app.disable("x-powered-by");
app.get("/ping", (req, res) => res.send("Pong")); // <-- no X-Powered-By header

const moreRoutes = express();
moreRoutes.get("/ping", (req, res) => res.send("Pong")); // <-- X-Powered-By header still present

app.use("/api/v2", moreRoutes);

해결책은 단순히 전체 인스턴스 대신 새로운 Express.Router를 만드는 것입니다.

const moreRoutes = express.Router();

1

https://github.com/visionmedia/express/blob/master/lib/http.js#L72 코드를 읽으면 조건부처럼 보이지 않기 때문에 함께 살아야한다고 생각합니다.

nginx / apache 프론트 엔드가 있다면 헤더를 제거 할 수 있습니다 (아파치의 경우 mod_headers, nginx의 경우 헤더-더 있음)


1
어쨌든 웹 서버 접근 방식이 최고라고 생각합니다. 이것은 모범 사례를 지원합니다.
Dominic

0

removeHeader는 경로 미들웨어, 커피 스크립트 예제에서만 작동합니다.

fix_headers =  (req, res, next) ->
    res.removeHeader 'X-Powered-By'
    next()

app.get '/posts', fix_headers, (req, res, next) ->
  ...

0

이것을 제외하고는 아무것도 나에게 도움이되지 않았습니다.

app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))

Express ^ 4.17을 사용하고 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.