TIL 2021-05-11 (CORS)

nyongho·2021년 5월 10일
0

오늘 배운 내용

목록 보기
12/40

TIL


What I Learn?

1) CORS 란?

CORSCross Origin Resource Sharing 의 약자로 추가적인 HTTP header 를 사용해서 애플리케이션이 다른 origin 의 리소스에 접근 가능하게 하는 메커니즘을 말한다.
이를 통해 다른 origin 에서 자신의 리소스에 접근하지 못하게 사용한다.

과거의 브라우저는 나와 다른 도메인에서 요청을 보낸다는 것은 곧 불순한 행위 (해킹) 을 의미 했다.

따라서 이러한 타 도메인에서 요청을 보내는것을 막는 정책을 펼쳤지만 요즘 현대에서는 타 API 를 불러와 내 홈페이지에

사용하는 경우가 비일비재해지면서 나오게 된게 CORS 정책이다.

1-1. 단순요청 (Simple Request)

단순요청은 클라이언트가 헤더에 Origin 에 대한 정보를 담아 요청을 보내면, 서버에서 Access-Control-Allow-Origin 헤더에 접근이 허용될 Origin 에 정보를 담아 응답하고, 브라우저가 요청한 Origin 과 허용된 Origin 의 비교를 통해 요청한 응답을 제공하는 방식이다.

1-2. 프리플라이트 요청 (Preflight Request)

프리플라이트 요청은 단순요청과는 다르게, 먼저 OPTIONS 메소드를 통해 다른 도메인의 리소스로 HTTP 요청을 보내 실제 요청이 전송하기에 안전한지 미리 확인한다. Cross-Site 로의 요청은 유저 데이터에 영향을 줄 수도 있기 때문에 이와 같이 미리 전송하는 것이다.
프리플라이트 요청을 위해서는 위 단순 요청이 되기 위한 조건에 위배가 되어야 하는데, Content-Type 이 application/xml 로 설정한다고 가정하면 해당 요청은 프리플라이트 처리된다.

1-3. 인증정보를 포함한 요청 (Credentialed Request)

인증정보를 포함한 요청은 HTTP Cookies 와 HTTP Authentication 정보를 인식한다.
기본적으로 Cross-Site 에 대한 XMLHttpRequest 혹은 FetchAPI 요청에서 브라우저는 자격증명에 대한 정보를 보내지 않기 때문에, 특정한 플래그를 설정해주어야한다.


2) 요약

간단하게 CORS 는 브라우저와 서버 간의 안전한 다른 출처의 자원 요청과 데이터 전송을 지원하는 것이다.

즉, 브라우저는 기본적으로 SOP (Same Origin Policy) 에 의해 다른 서버로의 요청을 차단하지만, CORS 정책에 부합하는 요청은 허용하는 것이다.

profile
두 줄 소개

0개의 댓글