CORS 의 등장 배경과 CORS 정의, 동작 방식, 설정 방식을 학습합니다.
정의
방식
브라우저는 서버에 실제 요청을 보내기 전에 프리플라이트 요청을 보냅니다.
프리플라이트 요청에 대한 응답 헤더의 Access-Control-Allow-Origin
에 요청을 보낸 출처가 돌아오면 실제 요청을 보내게 됩니다.
만약 요청을 보낸 출처가 접근 권한이 없다면 브라우저에서 CORS 에러를 띄우고 실제 요청은 전달 되지 않습니다.
프리플라이트 요청이 필요한 이유
withCredentials : true
를 넣어줘야 합니다.Access-Control-Allow-Credentials : true
넣어줘야 합니다.Access-Control-Allow-Origin
설정할 때, 모든 출처를 허용하는 와일드카드(*
)로 설정하면 에러가 발생합니다.헤더의 값 설정 방법만 알면 다양한 개발 환경에서 CORS 설정 해줄 수 있습니다.
Node.js 로 간단한 HTTP 서버를 만들 경우 다음과 같이 응답 헤더를 설정해줄 수 있습니다.
// Node.js 서버
const http = require("http");
const server = http.createServer((request, response) => {
// 모든 도메인
response.setHeader("Access-Control-Allow-Origin", "*");
// 특정 도메인
response.setHeader("Access-Control-Allow-Origin", "https://hyeonwooga.com");
// 인증 정보를 포함한 요청을 받을 경우
response.setHeader("Access-Control-Allow-Credentials", "true");
})
// Express 서버
const cors = require("cors");
const app = express();
// 모든 도메인
app.use(cors());
// 특정 도메인
const options = {
origin: "https://hyeonwooga.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" });
});
코드스테이츠 프론트엔드 부트캠프