CORS (Cross-Origin Resource Sharing)

목적

작동 원리

요청 유형

CORS 시나리오

  1. 단순 요청

    1
    2
    3
    4
    5
    
    1. 클라이언트 요청
       Origin: https://frontend.com
    
    2. 서버 응답
       Access-Control-Allow-Origin: https://frontend.com
    
  2. 예비 요청

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    1. 예비 요청 (OPTIONS)
       Origin: https://frontend.com
       Access-Control-Request-Method: PUT
       Access-Control-Request-Headers: Content-Type
    
    2. 서버 응답
       Access-Control-Allow-Origin: https://frontend.com
       Access-Control-Allow-Methods: GET, POST, PUT
       Access-Control-Allow-Headers: Content-Type
    
    3. 실제 요청
       [요청 내용]
    
    4. 서버 응답
       [응답 내용]
    

주요 CORS 헤더

헤더설명예시
Access-Control-Allow-Origin허용된 출처 지정Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods허용된 HTTP 메서드Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers허용된 헤더Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age예비 요청 캐시 시간Access-Control-Max-Age: 3600
Access-Control-Allow-Credentials인증 정보 허용Access-Control-Allow-Credentials: true

보안 고려사항

CORS는 보안 메커니즘이 아니라 브라우저의 제한을 완화하는 방법

  1. 기본 보안 원칙
    • 필요한 출처만 허용
    • 와일드카드(*) 사용 제한
    • 중요한 API의 경우 더 엄격한 제한
  2. 인증 관련
    • Credentials 설정 시 와일드카드 사용 불가
    • 안전한 출처 검증
    • 토큰 기반 인증 권장

일반적인 CORS 에러

에러 유형원인해결 방법
허용되지 않은 출처서버의 Allow-Origin 미설정적절한 출처 허용
메서드 미허용Allow-Methods 미설정필요한 메서드 허용
헤더 미허용Allow-Headers 미설정필요한 헤더 허용
인증 관련Credentials 설정 문제인증 관련 설정 확인

CORS 오류 해결 방법

  1. 서버 측 설정
    • 적절한 CORS 헤더 설정
    • 허용할 출처 명시
    • 필요한 메서드와 헤더 허용
    • 인증 관련 설정 조정
  2. 프록시 사용
    • 개발 환경에서 프록시 서버 설정
    • API 게이트웨이 활용
    • 리버스 프록시 구성—

참고 및 출처