본문 바로가기

Network

CORS란

 

CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 웹 애플리케이션이 서로 다른 출처(origin)에서 리소스를 요청할 수 있게 해주는 보안 기능이다.

기본적으로 웹 브라우저는 동일 출처 정책(Same-Origin Policy)에 의해 다른 출처의 리소스에 대한 요청을 제한한다.

이 정책은 악의적인 웹 사이트가 사용자의 데이터를 훔치거나 조작하는 것을 방지하기 위해 존재한다.

하지만, CORS를 통해 합법적인 경우에 한해 이러한 제약을 해제할 수 있다.

동일 출처 정책

동일 출처 정책은 웹 보안의 핵심 개념이다. 동일 출처란 프로토콜, 호스트, 포트가 모두 동일한 경우를 말한다.

예를 들어, http://example.comhttps://example.com은 프로토콜이 다르므로 동일 출처가 아니다.

이 정책에 의해 브라우저는 다른 출처의 리소스에 대한 접근을 제한한다.

CORS의 필요성

현대의 웹 애플리케이션은 종종 여러 출처에서 데이터를 가져와야 한다. 예를 들어, 클라이언트 애플리케이션이 API 서버에서 데이터를 가져와야 하는 경우가 있다. 이러한 상황에서 동일 출처 정책만으로는 불편함이 크다. CORS는 이러한 문제를 해결하기 위해 도입되었다. 서버가 클라이언트의 요청을 받아들이도록 명시적으로 허용할 수 있게 한다.

CORS 동작 방식

CORS는 서버와 클라이언트 간의 HTTP 헤더를 통해 동작한다. 클라이언트가 서버에 요청을 보내면, 서버는 응답 헤더에 특정 정보를 포함하여 CORS 요청을 허용할 수 있다. 주요 헤더는 다음과 같다:

  • Access-Control-Allow-Origin: 요청을 허용할 출처를 명시한다.
  • Access-Control-Allow-Methods: 허용할 HTTP 메서드(GET, POST, PUT, DELETE 등)를 명시한다.
  • Access-Control-Allow-Headers: 클라이언트가 요청할 때 사용할 수 있는 헤더를 명시한다.
  • Access-Control-Allow-Credentials: 클라이언트의 쿠키를 포함한 자격 증명을 허용할지를 명시한다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}

위 코드에서는 스프링 프레임워크를 사용하여 모든 경로에 대해 에서 오는 요청을 허용하고 있다. 또한, GET, POST, PUT, DELETE 메서드를 허용하고, 모든 헤더를 허용하며, 자격 증명도 포함하도록 설정하고 있다.

'Network' 카테고리의 다른 글

API 문서 작성: HTTP Status와 JSON 파라미터  (0) 2024.08.07
SSR vs CSR  (0) 2024.08.02
Open API와 API Key  (0) 2024.05.31
HTTP  (0) 2024.05.31
심화 SPA  (0) 2024.05.31