jinsusong / CS-Study

CS
3 stars 5 forks source link

CORS란? #24

Open jungmiin opened 1 year ago

jungmiin commented 1 year ago
SW-H commented 1 year ago

👽 개념

CORS(Cross-Origin Resource Sharing) : 다른 출처로의 리소스 요청을 제한하는 것과 관련된 정책

SOP(Same-Origin Policy) : 동일한 출처에서만 리소스를 공유할 수 있다

👽 CORS 기본 동작 흐름

  1. 클라이언트 : 다른 출처의 리소스를 요청할 때는 HTTP 프로토콜을 사용하여 요청을 보내게 되는데, 이때 브라우저는 요청 헤더에 Origin이라는 필드에 요청을 보내는 출처를 함께 담아보낸다.
  2. 서버 : 이 요청에 대한 응답을 할 때 응답 헤더의 Access-Control-Allow-Origin이라는 값에 “이 리소스를 접근하는 것이 허용된 출처”를 내려준다
  3. 브라우저 : 응답을 받으면 자신이 보냈던 요청의 Origin과 서버가 보내준 응답의 Access-Control-Allow-Origin을 비교해본 후 이 응답이 유효한 응답인지 아닌지를 결정한다.

👽 CORS 동작 방식 시나리오

  1. 예비요청(Prefilght) : 요청을 보낼때 한번에 바로 보내지않고, 먼저 예비 요청을 보내 서버와 잘 통신되는지 확인한 후 본 요청 보냄
  2. 단순요청(Simple Request) : 예비 요청(Prefilght)을 생략, 바로 서버에 본 요청을 보낸 후, 서버가 이에 대한 응답의 헤더에 Access-Control-Allow-Origin 헤더를 보내주면 브라우저가 CORS정책 위반 여부를 검사하는 방식
  3. 인증된 요청 (Credentialed Request) : 라이언트에서 서버에게 자격 인증 정보(Credential)를 실어 요청할때 사용되는 요청 (자격 인증 정보: 세션 ID가 저장되어있는 쿠키(Cookie) 혹은 Authorization 헤더에 설정하는 토큰 값)

👽 CORS 해결 방법

cf. https://inpa.tistory.com/entry/WEB-📚-CORS-💯-정리-해결-방법-👏 https://evan-moon.github.io/2020/05/21/about-cors/