cs
[컴퓨터 네트워크] SOP / CORS
<Eunhak>
2024. 8. 28. 16:26
SOP (Same-Origin Policy, 동일 출처 정책)
동일 출처 정책은 브라우저에서 기본적으로 적용되는 보안 메커니즘으로, 웹 페이지가 로드된 출처(origin)와 동일한 출처에서만 자원(예: 스크립트, 데이터 등)을 불러올 수 있도록 제한합니다.
출처 (Origin)의 정의:
- 프로토콜 (e.g., http:// vs https://)
- 도메인 (e.g., example.com vs api.example.com)
- 포트 번호 (e.g., :80, :443)
이 세 가지가 모두 동일해야만 동일 출처로 간주됩니다.
예시:
- http://example.com/page1은 http://example.com/page2와 동일 출처로 간주됩니다.
- 하지만 http://example.com과 https://example.com은 다른 출처로 간주됩니다.
- 또한 http://example.com과 http://api.example.com도 다른 출처로 간주됩니다.
CORS
CORS는 웹 애플리케이션이 다른 출처에서 자원을 요청할 수 있도록 허용하는 HTTP 헤더 기반의 메커니즘입니다. CORS는 서버 측에서 설정되며, 서버가 특정 출처에 대해 자원의 접근을 허용하도록 지정할 수 있습니다.
작동 원리:
- 프리플라이트 요청 (Preflight Request):
- 안전하지 않은 HTTP 메서드(e.g., PUT, DELETE, PATCH)나 특정한 헤더를 사용하는 경우, 브라우저는 실제 요청을 보내기 전에 OPTIONS 메서드를 사용하여 서버에 프리플라이트 요청을 보냅니다. 이 요청을 통해 브라우저는 서버가 해당 요청을 허용하는지 확인합니다.
- 서버가 프리플라이트 요청에 대한 긍정적인 응답을 보내면 브라우저는 실제 요청을 실행합니다.
- 서버 응답:
- 서버는 Access-Control-Allow-Origin 헤더를 사용하여 요청이 허용된 출처를 지정합니다.
- 예를 들어, Access-Control-Allow-Origin: *는 모든 출처에 대해 요청을 허용한다는 의미입니다.
- 또는 Access-Control-Allow-Origin: https://example.com와 같이 특정 출처만 허용할 수도 있습니다.
예시:
- 만약 클라이언트가 https://example.com에서 https://api.anotherdomain.com/data에 요청을 보내려면, https://api.anotherdomain.com 서버는 CORS 헤더를 사용하여 https://example.com 출처를 허용해야 합니다.
왜 필요한가?
- CORS는 동일 출처 정책의 단점을 보완하여, 합법적인 상황에서 다른 출처의 자원에 접근할 수 있도록 합니다. 이를 통해 RESTful API 서버와 클라이언트가 다른 도메인에서 호스팅되더라도 상호 작용할 수 있습니다.