same-origin-policypreflight

CORS를 설명해 주세요

예상 시간
7
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

origin은 무엇으로 결정되나요?

부가 설명

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type, Authorization

server가 이런 header를 응답하면 browser는 해당 origin의 JavaScript가 응답을 읽을 수 있다고 판단합니다.

preflight는 실제 요청 전에 browser가 보내는 확인 요청입니다.

OPTIONS /api/users HTTP/1.1
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization

server가 허용한다고 답해야 실제 요청이 이어집니다.

CORS 에러가 나면 개발자가 fetch나 axios 설정만 바꾸려고 하는 경우가 많습니다. 하지만 browser가 응답 접근을 막는 것이므로, server가 올바른 CORS header를 내려줘야 합니다.

proxy를 쓰면 개발 환경에서는 origin을 맞춰 문제를 우회할 수 있지만, 운영 환경에서는 API server의 CORS 정책을 명확히 정해야 합니다.

한 줄 정리

CORS는 browser가 cross-origin 응답을 JavaScript에 노출해도 되는지 server header로 확인하는 보안 메커니즘입니다.