IT/PHP Web JS CSS HTML..
[node js] CORS 에러 해결 방법 example [Multi host 사용하기]
[하늘이]
2020. 12. 22. 22:56
반응형
CORS 에러 해결 방법 example [Multi host 사용하기]
이슈 발생상태
nodejs 로 express 를 사용하여 REST API 를 만들었다.
동작확인 중 외부 front web app 에서 ajax call 시 CORS 에러가 발생하였다.
서칭을 해보니 몇가지 방법이 있어 참고용으로 남긴다
1. res.header에 "Access-Control-Allow-Origin" 을 명시적으로 사용.
8라인에서 localhost:8081 정보를 허용하는 것을 명시적으로 입력하였다.
[보안 주의] 9라인 처럼 * 을 사용하는 경우 모든 Host 를 허용하게 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | const app = express(); app.all('/*', function(req, res, next) { logger.debug("Access-Control-Allow-Origin~~~~~~"); res.header("Access-Control-Allow-Origin", "http://localhost:8081"); // res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); next(); }); // 위코드 아래에 REST api router 를 선언해야 된다. app.use('/xxxx/test/v1', router_xxxxx); | cs |
2. 다중 host 추가방법
위방법은 단일 host 만 가능하다.
REST API 를 여러곳에서 사용하기 위하여는 다른 방법이 필요하여 다시 검색.
아래 방법을 찾아 동작 상태를 확인하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | app.all('/*', function(req, res, next) { logger.debug("Access-Control-Allow-Origin~~~~~~"); const allowedOrigins = ['http://localhost:8081', 'http://test11111:8082']; // CORS 허용할 도메인 목록 const origin = req.headers.origin; res.setHeader('Content-Type', 'application/json; charset="utf-8"'); // CORS 허용 if(allowedOrigins.indexOf(origin) > -1) { // res.setHeader('Access-Control-Allow-Origin', origin); } res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.setHeader('Access-Control-Max-Age', '3600'); res.setHeader('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers'); next(); }); | cs |
Method 허용하려는 것을 여러개 넣고,
max-age : 다른 preflight request를 보내지 않고, preflight request에 대한 응답을 캐시할 수 있는 시간(초)을 제공합니다. 위의 코드는 86400 초(24시간) 입니다. 각 브라우저의 최대 캐싱 시간 은 Access-Control-Max-Age 가 클수록 우선순위가 높습니다.
REF Site
반응형