맨틀 이야기
웹 리소스 전송 관련 정책 본문
SOP (Same-Origin Policy)
SOP(Same-Origin Policy)는 웹 브라우저에서 보안을 위해 도입된 정책으로, 서로 다른 출처(origin) 간의 리소스 공유를 제한한다. 이를 통해 악의적인 웹사이트가 사용자의 데이터를 탈취하는 것을 막는다.
출처란 URL의 프로토콜, 호스트, 포트 번호가 모두 같을 때 동일하다고 판단된다. 예를 들어 https://example.com:443/page1과 https://example.com:443/page2는 동일 출처지만, http://example.com(프로토콜 다름)이나 https://example.com:8443(포트 다름)는 동일 출처가 아니다.
SOP는 다음과 같은 상황을 제어한다:
- DOM 접근: 서로 다른 출처 간의 DOM을 직접적으로 접근할 수 없다.
- AJAX 요청: XMLHttpRequest를 이용해 서로 다른 출처로 AJAX 요청을 보낼 수 없다.
- 쿠키 및 세션: 다른 출처의 쿠키나 세션은 접근할 수 없다.
SOP는 보안 강화를 위한 정책이긴 하지만, 데이터를 공유해야 하는 상황에서도 막히는 경우가 있어 웹 개발의 유연성을 떨어뜨릴 수 있다. 이럴 때에 활용하는 것이 CORS다.
CORS (Cross-Origin Resource Sharing)
SOP의 제한을 우회하기 위한 표준 방식을 CORS(Cross-Origin Resource Sharing)라고 한다. CORS는 서로 다른 출처의 리소스를 안전하게 공유하도록 한다. 서버가 특정 출처에 대해 데이터를 제공하도록 허용하는 헤더를 추가해, 클라이언트가 다른 출처로부터 리소스를 가져올 수 있도록 한다.
CORS의 동작 원리:
- Preflight 요청: CORS 요청은 일반적으로 preflight 요청을 통해 시작된다. 클라이언트는 먼저 서버에 OPTIONS 요청을 보내, 특정 HTTP 메서드나 헤더가 허용되는지 확인한다.
- 응답 헤더 확인: 서버는 응답 헤더(Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers 등)를 통해 특정 출처에 대한 요청을 허용할지 결정한다.
- 본 요청 전송: 서버가 허용한 경우에만 브라우저가 본 요청을 전송하고, 데이터가 성공적으로 교환된다.
CORS의 구성 요소:
- Access-Control-Allow-Origin: 특정 출처(origin) 또는 모든 출처(*)를 허용하는 헤더
- Access-Control-Allow-Methods: 허용된 HTTP 메서드(GET, POST, PUT 등)를 정의
- Access-Control-Allow-Headers: 클라이언트가 요청 시 사용할 수 있는 헤더를 지정
- Access-Control-Allow-Credentials: true로 설정해 인증 정보를 포함한 요청(예: 쿠키 전송)을 허용
'CS' 카테고리의 다른 글
TCP 프로토콜 (0) | 2024.11.23 |
---|---|
UDP 프로토콜 (0) | 2024.11.22 |
쿠키, 세션, JWT 토큰으로 사용자 세션 유지 (0) | 2024.11.15 |
SSL/TLS 프로토콜의 암호화 과정 (0) | 2024.11.12 |
DNS가 뭔가요? (0) | 2024.11.06 |