[출처] http://guswnsxodlf.github.io/enable-CORS-on-express
[출처] http://guswnsxodlf.github.io/enable-CORS-on-express
CORS란 무엇인가
CORS란 Cross Origin Resource Sharing의 약자로, 현재 도메인과 다른 도메인으로 리소스가 요청될 경우를 말한다. 예를 들어, 도메인 http://A.com 에서 읽어온 HTML페이지에서 다른 도메인 http://B.com/image.jpg를 요청하는 경우를 말한다. 이런 경우에 해당 리소스는 cross-origin HTTP 요청에 의해 요청된다. 보안 상의 이유로, 브라우저는 CORS를 제한하고 있다.
하지만 SPA(Single Page Application)의 경우에는, RESTful API를 기반으로 비동기 네트워크 통신을 하기 때문에 API 서버와 웹 페이지 서버가 다를 수 있다. 이런 경우에 API 서버로 요청을 할 시에 CORS 제한이 걸리게 된다.
Access-Control-Allow-Origin
이를 해결하기 위해서 가장 간단한 방법은, 서버(API 서버)의 응답 헤더를 변경해주는 것이다. 서버의 헤더 중에는 Access-Control-Allow-Origin라는 프로퍼티가 있는데, CORS를 허용해 줄 도메인을 입력하는 곳이다. 모든 곳에서 CORS를 허용하기 위해서는 모두를 의미하는 *
를 입력하면 된다.
Access-Control-Allow-Origin: *
만약 특정 도메인에만 허용하길 원한다면,
Access-Control-Allow-Origin: http://A.com, http://B.com, ...
이렇게 입력해주면 된다.
Express에서 CORS 허용하기
Express에서 CORS를 허용하려면, 위에서 언급한 방법처럼 헤더를 직접 변경해주는 방법이 있고, 미들웨어를 사용하는 방법이 있다.
먼저 첫 번째 방법은 다음과 같다.
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
Access-Control-Allow-Origin
를 위에서 언급한대로 설정했고, Access-Control-Allow-Headers
를 설정했다. 이는 이 요청이 Form이 아닌 비동기(AJAX) 요청임을 알려주기 위함이다.
다른 방법으로는, 간단하게 express의 CORS 미들웨어를 적용하는 것이다. README를 보면 CORS 관련 헤더를 편하게 설정할 수 있다. 위의 방법보다는 이 방법을 추천한다.
var express = require('express');
var cors = require('cors');
var app = express();
// CORS 설정
app.use(cors());
app.get('/products/:id', function (req, res, next) {
res.json({msg: 'This is CORS-enabled for all origins!'})
});
app.listen(80, function () {
console.log('CORS-enabled web server listening on port 80')
});
위처럼 미들웨어를 사용할 경우, 모든 CORS 요청을 허용할 시 한 줄로 간단하게 추가 할 수 있다.
'Language > JavaScript' 카테고리의 다른 글
[nodejs] mongoose 커넥션 이벤트 함수 (1) | 2019.02.14 |
---|---|
Monitoring MongoDB connection status (0) | 2019.02.14 |
[Nodejs] [node.js] express.js 라우트 요청 객체(req), 응답 객체(res) 정리 (0) | 2018.12.13 |
[nodeJs] PM2 - 2 (0) | 2018.12.12 |
[Nodejs] pm2 cluster 모드 사용 시 log4js 로그 미출력 시 (0) | 2018.12.12 |