CS
CORS(교차 출처 리소스 공유)
koka
2025. 3. 11. 17:43
cors(Cross-Origin Resource Sharing)
HTTP 헤더를 사용하여 서로 다른 출처(도메인, 프로토콜, 포트)에 있는 웹 페이지나 서버가 서로의 자원에 접근할 수 있도록 허용하는 보안 매커니즘
브라우저가 임의의 웹 페이지에서 다른 웹페이지의 자원에 무분별하게 접근하는 것을 막아XSS(Cross-Site Scripting)와 같은 보안 위협으로부터 웹 페이지를 보호하는 역할을 한다.
브라우저는 기본적으로 동일 출처 정책을 따르기 때문에 특정 웹 페이지에서 로드된 스크립트는 해당 페이지와 같은 출처의 리소스에만 접근할 수 있다. 따라서 다른 출처로부터 자원을 요청하려면 CORS헤더를 통해 해당 출처를 서버가 허용한다는 것을 브라우저에 알려야 한다.
Origin
예를 들어 https://google.com과 같은 Url들은 은 마치 하나의 문자열 같아 보여도, 사실 여러개의 구성 요소로 이루어진다.
이때 출처는 protocol과 Host와 포트 번호 까지 모두 합친 것을 의미한다. 서버의 위치를 찾아가기 위해 필요한 가장 기본적인 것들을 합쳐놓은 것이다.
Cross-Origin (다른 출처)판단 기준
Scheme(프로토콜), Host(도메인), Port, 이 3가지만 동일하면 된다.
CORS의 동작 시나리오
- 기본적으로 웹 클라이언트 어플리케이션이 다른 출처의 리소스를 요청할 때 HTTP프로토콜을 사용하여 요청을 보내게 된다.
- 브라우저는 요청 헤더에 Origin이라는 필드에 요청을 보내는 출처를 함께 담아보낸다.
- Origin : https://google.com
- 서버가 이 요청에 대한 응답을 할 때 응답 헤더의 Access-Control-Allow-Origin 이라는 값에 "리소스를 접근하는 것이 허용된 출처"를 내려주고, 응답을 받은 브라우저는 자신이 보냈던 요청의 Orgin과 서버가 보내준 응답의 Access-Control-Allow-Origin을 비교해본 후 이 응답이 유요한 응답인지 아닌지 결정
Preflight Request
- 실제 요청을 보내도 안전한지 판단하기 위해 사전에 보내는 요청
- OPTIONS 메서드로 요청하며 CORS를 허용하는지 확인한다
- CORS가 허용된 웹서버라면 사용 가능한 리소스를 헤더에 담아 응답한다