개념

출처

누가 확인하지?

CORS 관점에서 보는 3가지 통신 방법

  1. Preflight
    1. 브라우저가 서버에 예비 요청을 보낸다
    2. 예비 요청에 대해, 서버는 어떤 것들이 허용되고 금지되는지에 대한 정보를 응답 헤더에 담아 보낸다.
      1. origin, credential, method 등
    3. 브라우저는 예비 요청과 그에 대한 서버의 응답을 비교하여 안전하다고 판단될 경우 본 요청을 서버로 보낸다
    4. 이후 서버가 응답하면 브라우저는 응답 데이터를 클라이언트에 넘겨준다
  2. Simple Request
    1. 브라우저는 예비 요청 없이 서버에 바로 본 요청을 보내고, 응답 헤더의 내용을 바탕으로 CORS 정책 위반 여부를 파악하여 처리한다
      1. 예비 요청이 없다는 점을 제외하고, 1번과 로직이 같다
      2. 제약 조건이 까다로워, 실제로 사용되는 일이 드물다
        1. 사용 가능한 method 제한,
        2. 사용 가능한 header 제한,
        3. 사용 가능한 Content-type 제한
  3. Credentialed Request
    1. 요청 헤더에 Credentials를 추가하여 요청을 보낼 때 쿠키와 같은 인증 정보를 함께 전송
      1. Same-origin: 같은 출처에 보낼 때만 인증 정보 전송
      2. Include: 모든 요청에 대해 인증 정보 전송
      3. Omit: 모든 요청에 인증 정보를 담지 않음
    2. 인증 정보가 담긴 상태에서 다른 출처로 리소스를 요청할 경우 기존 CORS 룰에 새로운 규칙을 2개 추가함
      1. 서버측에서 Access-Control-Allow-Credentials: true를 꼭 사용해야 함
      2. 서버측에서 Access-Control-Allow-Origin 에 명확한 출처를 명시해야 함
        1. 보안 상의 이슈로 * 를 사용할 수 없음

CORS 이슈를 해결하는 방법

서버