본문 바로가기
카테고리 없음

[web server] CORS(cross-origin resource sharing) 개념 정리

by 크롱이크 2021. 5. 30.

Same-origin policy (동일 출처 정책)

 

 

1. 프로토콜( http / https) 

2. 포트( 8000 / 5000 / 3000 )

3. 호스트 (도메인 이라고도 한다.) (tistory.com / naver.com / google.com )

 

 

CORS(cross-origin resource sharing)

 

기본적으로 요청과 응답은 동일 출처 정책에 따른다. 보안을 위해 다른 출처에서 갖고 온 리소스를 믿지 못해 잠재적 위험성을 아예 차단해버리면 XSS와 CSRF를 막을 수는 있지만 개발시 외부 API를 사용하는 경우도 많고 클라이언트와 서버를 분리하여 개발하는 경우도 많기에 동일 출처에만 리소스를 요청하는 것은 현실적으로 어렵다.

 

그래서 동일 출처 정책에 예외를 두어, 요청의 출발지와 목적지가 다른 출처로 판단되더라도 통신을 허용하는 방법입니다.

요청의 유형을 3가지로 나누어 다른 처리 방식을 취합니다.

 

Simple Request(단순 요청)

 

Simple Request는 특정 조건을 만족하는 경우에만 사용이 가능합니다. 

1. 요청 메소드가 GET, HEAD, POST중 하나여야만 됨

2. User agent에 의해 자동으로 정해진 헤더만 사용해야 되며 custom header는 사용하면 안 됨

3. 요청 메소드가 POST일 때 Content-Type은 Content-Type은 application/x-www-form-urlencoded 이거나 multipart/form-data, text/plain 만 사용할 수 있다.

 

preflight Request(예비 요청)

 

브라우저는 요청을 예비 요청과 본 요청으로 나누어 서버에 전송하며, 예비 요청 시 HTTP의 OPTIONS 메소드를 사용해 요청을 전달할 서버가 안전한지 확인 후 요청을 한다. 실제 요청이 안전한지 서버가 미리 파악할 수 있도록 하는 수단이다

 

실질적인 요청 전, OPTIONS 메서드를 통해 발생한다. 모든 cross origin 요청이 preflight request를 발생시키는 것은 아니다.

요청에 origin과 응답의 Access-COntrol-Allow-Origin을 브라우저가 비교해 출처를 판단하여 다르면 에러를 발생시키고 접근 가능한 출처라면 200번대 성공 코드를 반환합니다.

 

 

Credential Request

다른 출처 사이의 통신에서 보안을 강화하고 싶을 때 사용하는 방법(제대로 배우면 수정해서 올리겠습니다^^) 

 

 

반응형

댓글