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();
});
'ProgramingTip' 카테고리의 다른 글
gradle.properties 파일을 위치 위치 (0) | 2020.12.07 |
---|---|
Cloud Foundry와 Docker의 차이점은 무엇입니까? (0) | 2020.12.07 |
PHP 함수에서 HTML을 반환하는 방법이 있습니까? (0) | 2020.12.06 |
.NET 버전 4.5가 현재 코드를 실행하고 있음을 런타임에 감지합니까? (0) | 2020.12.06 |
원격 src로 펼쳐 태그를 삽입하고 실행될 때까지 기다립니다. (0) | 2020.12.06 |