과거 수 년 동안, 한 사이트의 스크립트에서 다른 사이트에 있는 콘텐츠에 접근할 수 없다는 제약이 있었습니다.
같은 origin에서만 공유를 가능할수 있도록 SOP이 정해져 있었고. 정보의 확장을 위해 CORS를 허용하게 되었다.
출처
는 scheme,hosts까지를 뜻함Cross-Origin Resource Sharing
다른출처의 리소스를 받아올 필요가 있을 때 접근 권한을 얻을 수 있게 됨.
추가 HTTP 헤더
가 필요하고, A 출처에서 실행중인 웹앱이 B 출처의 선택한 자원에 접근할 수 있는 권한
을 부여하도록 브라우저에 알려주는 체제
서버의 응답 헤더에 Access-Control-Allow_Origin
을 작성하면 접근 권한을 얻을 수 있다.
Node.js 뿐만 아니라 Express, Fastify 등 다른 서버 환경에서도 CORS 설정을 할 수 있다.
1. Preflight Request
const http = require('http');
const server = http.createServer((request, response) => {
// 모든 도메인
response.setHeader("Access-Control-Allow-Origin", "*");
// 특정 도메인
response.setHeader("Access-Control-Allow-Origin", "https://codestates.com");
// 인증 정보를 포함한 요청을 받을 경우
response.setHeader("Access-Control-Allow-Credentials", "true");
})
const cors = require("cors");
const app = express();
//모든 도메인
app.use(cors());
//특정 도메인
const options = {
origin: "https://codestates.com", // 접근 권한을 부여하는 도메인
credentials: true, // 응답 헤더에 Access-Control-Allow-Credentials 추가
optionsSuccessStatus: 200, // 응답 상태 200으로 설정
};
app.use(cors(options));
//특정 요청
app.get("/example/:id", cors(), function (req, res, next) {
res.json({ msg: "example" });
});