CORS에 대해 설명해주세요
추가 HTTP 헤더를 사용하여 한 출처에서 실행중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다.
서버와 클라이언트가 정해진 헤더를 통해 서로 요청이나 응답에 반응할지 결정하여 브라우저에 알려주는 체제이다.
웹 브라우저에서 외부 도메인 서버와 통신하기 위한 방식이다.
리소스가 자신의 출처와 다를 때 교차 출처 HTTP 요청을 실행한다.
CORS는 cross origin resource sharing을 의미한다.
서버 자원을 보호하기 위한 보안 규칙이다.
동일 출처 정책(SOP: Same Origin Policy)
어떤 출처(origin)에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호 작용하는 것을 제한하는 보안 방식이다.
출처가 같다는 것은 두 URL의 프로토콜, 호스트(도메인), 포트 세 개가 같다는 것을 의미한다.
크로스 도메인 이슈
SOP를 우회해서 서로 다른 도메인 간에 통신을 할 수 있게 해줄 무언가가 필요하다.
교차 출처 리소스 공유 (Cross Origin Resource Sharing)
CORS 체제는 브라우저와 서버 간의 안전한 교차 출처 요청 및 데이터 전송을 지원한다.
다른 출처의 리소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 한다.
접근 제어 시나리오
단순 요청 (Simple Requests)
사전 요청을 발생시키지 않는 요청이다.
요청 메서드가 GET
, HEAD
, POST
중 하나이다.
특별한 헤더를 사용하지 않거나 다음과 같이 제한된다.
- Accept
- Accept-Language
- Content-Language
- Content-Type (단, 값이 application/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나여야 함)
사전 요청 (Preflighted Requests)
브라우저가 실제 요청을 보내기 전에 먼저 옵션을 확인하는 역할을 한다.
브라우저는 OPTIONS 메서드를 사용해 사전 요청을 보내고 서버는 이에 대한 응답으로 허용 여부를 명시한다.
서버 응답에는 사전 요청을 허용하는지 여부와 함께 실제 요청에서 사용되는 메서드, 헤더 등의 정보가 포함된다.
GPT로 문장 정리하기
CORS에 대해 설명해줘
- 웹 애플리케이션에서 발생하는 보안 정책 중 하나
- 동일 출처 정책을 우회하여 다른 도메인 간에 자원을 공유할 수 있도록 하는 메커니즘
- 다른 출처의 웹 페이지에서 현재 페이지의 자원에 접근하는 것을 허용하기 위해 추가적인 HTTP 헤더와 메커니즘을 정의
- 동작 방식
- 요청 전송
- 브라우저에서 생성된 HTTP 요청에는 추가적인 헤더(
Origin
헤더)가 포함. 이 헤더는 요청을 보내는 페이지의 출처를 나타냄
- 브라우저에서 생성된 HTTP 요청에는 추가적인 헤더(
- 사전 검사(Preflight)
- 브라우저는 실제 요청을 보내기 전 사전 검사 요청을 보낼 수 있음. 사전 검사 요청은 실제 요청 전에 특정 HTTP 메서드나 헤더를 사용할 경우 서버가 이를 허용하는지 확인하는 역할 수행
- 사전 검사 요청은 OPTIONS 메서드를 사용, 서버는 이에 대한 응답으로 허용 여부를 나타내는 헤더 반환
- 응답 처리
- 서버는 실제 요청에 대한 응답을 보내며 브라우저는 이 응답을 검사하여 자원에 대한 접근이 허용되었는지 확인
- 서버는 응답 헤더 중에
Access-Control-Allow-Origin
등의 헤더를 사용하여 다른 출처에서의 접근을 허용하는지 여부 명시
- 요청 전송
키워드 정리
- 서버 자원을 보호하기 위한 서버와 브라우저의 약속
- 동일 출처 정책
- 교차 출처 리소스 공유
- 단순 요청
- 사전 요청
- 출처
- 요청:
origin
- 서버:
access-control-allow-origin
- 요청:
- 메서드
- 요청:
access-control-request-methods
- 서버:
access-control-allow-methods
- 요청:
- 헤더
- 요청:
access-control-request-headers
- 서버:
access-control-allow-headers
- 요청:
- 캐시
- 서버:
access-control-max-age
- 서버: