ProgramingTip

nodejs의 여러 도메인에 대한 Access-Control-Allow-Origin 활성화

bestdevel 2020. 12. 6. 21:55
반응형

nodejs의 여러 도메인에 대한 Access-Control-Allow-Origin 활성화


이 질문에 이미 답변이 있습니다.

나는 Node.js를를에 CORS 있도록하기 위해 수 노력하고있어하지만 문제는이 설정되지 수 있다는을 구석으로입니다 *Access-Control-Allow-Origin경우 Access-Control-Allow-Credentials설정됩니다.

또한 사양은 배열 또는 쉼표로 구분 된 값을 수행 할 수있는 말 Access-Control-Allow-Origin이며 제안 된 방법은이 Access-Control-Allow-Origin 수행 할 작업을 수행하는 것입니다 .

하지만 node.js에서 이런 식으로 할 수없는 것입니다.

["http://mydomain.com:9001", "http://mydomain.com:5001"].map(function(domain) {
  res.setHeader( "Access-Control-Allow-Origin", domain );
});
res.header( "Access-Control-Allow-Credentials", true );

여기서 문제는 배열의 마지막 값에 의해 재정의되어 헤더가 다음과 같이 설정하고 것입니다. res.setHeader( "Access-Control-Allow-Origin", "http://mydomain.com:5001" );

클라이언트 브라우저의 오류 :

XMLHttpRequest는 http://mydomain.com:9090/api/sync를 로드 할 수 없습니다 . '액세스 제어 - 허용 - 원산지'헤더 에 제공된 출처와 동일하지 않은 ' http://mydomain.com:5001 ' 이 있습니다. 따라서 출처 ' http://mydomain.com:9001 '은 액세스가 허용되지 않습니다.


다음은 여러 출처를 허용하기 위해 내 컴퓨터 애플리케이션에서 사용하는 것입니다.

app.use(function(req, res, next) {
  var allowedOrigins = ['http://127.0.0.1:8020', 'http://localhost:8020', 'http://127.0.0.1:9000', 'http://localhost:9000'];
  var origin = req.headers.origin;
  if(allowedOrigins.indexOf(origin) > -1){
       res.setHeader('Access-Control-Allow-Origin', origin);
  }
  //res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:8020');
  res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Credentials', true);
  return next();
});

이것이 늦었는지 확실하지 않지만 다음을 설정하여 해결했습니다. res.setHeader("Access-Control-Allow-Origin", req.headers.origin);

이 headers.origin이 모든 쿼리와 함께 전송 모든 연결을 허용합니다.

req.headers.origin이 (하드 코딩 된 배열에서) 화이트리스트 도메인인지 확인하는 함수를 작성하고 배열에 존재하는 경우이 도메인을 반환 할 수 있습니다.


req.headers.origin 예를 들어 화이트리스트를 확인하십시오.

var origins = ['a.com', 'b.com', 'c.com', 'boobies.com'];
for(var i=0;i<origins.length;i++){
    var origin = origins[i];
    if(req.headers.origin.indexOf(origin) > -1){ 
         res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
         return;
    }
    // else, tough cookies. 
}

즐겨.


다음은 화이트리스트에서 올바른 CORS 헤더를 제공하는 간단한 미들웨어 기능입니다. 설치하기 전에 모든 경로가 콘텐츠를 접근에 설정하기 전에 화이트리스트에서 접근을 수 있습니다.

app.use(function(req, res, next){
  var whitelist = ['localhost:4000', 'localhost:3000', 'anydomain.com']
  var host = req.get('host');

  whitelist.forEach(function(val, key){
    if (host.indexOf(val) > -1){
      res.setHeader('Access-Control-Allow-Origin', host);
    }
  })

  next();
});

참고 URL : https://stackoverflow.com/questions/24897801/enable-access-control-allow-origin-for-multiple-domains-in-nodejs

반응형