728x90
반응형
Cross-Origin Resource Sharing(CORS)은 웹 브라우저에서 다른 도메인 간에 리소스를 요청하고 제공하는 방법을 정의하는 표준입니다. 보안상의 이유로, 브라우저는 스크립트가 원본(origin)을 초과하여 다른 도메인의 리소스에 접근하는 것을 제한합니다. 예를 들어, 한 도메인에서 로드된 웹 페이지가 다른 도메인에 있는 API에 요청을 보내고 데이터를 받아오는 경우가 이에 해당합니다.
CORS의 기본 개념
- Same-Origin Policy (동일 출처 정책)
- 동일 출처 정책은 웹 브라우저가 처음 요청을 보낸 출처와 동일한 출처로부터만 리소스를 가져올 수 있도록 하는 보안 정책입니다.
- 출처는 세 부분으로 구성됩니다: 프로토콜(예: http, https), 호스트(예: example.com), 포트(예: 80, 443).
- 동일 출처 정책은 악의적인 웹 사이트가 사용자의 데이터를 훔치거나 조작하는 것을 방지합니다.
- CORS (Cross-Origin Resource Sharing)
- CORS는 동일 출처 정책을 우회할 수 있도록 허용된 출처에서 요청을 보낼 수 있게 하는 메커니즘입니다.
- 서버는 특정 출처에서의 요청을 허용할 것인지 설정할 수 있습니다.
- 이를 위해 서버는 HTTP 응답 헤더에 필요한 정보를 추가하여 브라우저에 권한을 부여합니다.
CORS 요청의 종류
- Simple Requests (단순 요청)
- GET, HEAD, POST 중 하나의 메서드를 사용하며, 특정 조건을 만족하는 요청.
- 요청 헤더는 Accept, Accept-Language, Content-Language, Content-Type(단순 텍스트나 URL 인코딩된 데이터)만 포함합니다.
- 예: 단순 GET 요청.
- Preflight Requests (사전 요청)
- 서버에 사전 요청을 보내 실제 요청이 허용되는지 확인하는 과정.
- OPTIONS 메서드를 사용하여 서버에 사전 요청을 보냅니다.
- 서버가 허용하는 메서드와 헤더를 응답으로 반환합니다.
- 예: Content-Type이 application/json인 POST 요청.
- Actual Requests (실제 요청)
- Preflight 요청이 성공적으로 끝난 후 실제 데이터 요청이 이루어집니다.
CORS 헤더
- Access-Control-Allow-Origin
- 특정 출처를 지정하여 해당 출처의 요청을 허용.
- 모든 출처를 허용하려면 * 사용.
- 예: Access-Control-Allow-Origin: http://example.com
- Access-Control-Allow-Methods
- 서버가 허용하는 HTTP 메서드 목록.
- 예: Access-Control-Allow-Methods: GET, POST, PUT, DELETE
- Access-Control-Allow-Headers
- 서버가 허용하는 HTTP 요청 헤더 목록.
- 예: Access-Control-Allow-Headers: Content-Type, Authorization
- Access-Control-Allow-Credentials
- 자격 증명(쿠키, 인증 헤더 등)을 포함한 요청을 허용.
- 예: Access-Control-Allow-Credentials: true
- Access-Control-Expose-Headers
- 클라이언트가 접근할 수 있는 응답 헤더 목록.
- 예: Access-Control-Expose-Headers: X-Custom-Header
- Access-Control-Max-Age
- Preflight 요청의 결과를 캐시할 시간(초 단위).
- 예: Access-Control-Max-Age: 3600
예제
Spring Boot 애플리케이션에서 CORS 설정 예제:
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
class WebConfig : WebMvcConfigurer {
@Bean
fun corsConfigurer(): WebMvcConfigurer {
return object : WebMvcConfigurer {
override fun addCorsMappings(registry: CorsRegistry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600)
}
}
}
}
이 예제에서는 http://localhost:3000에서 오는 모든 요청에 대해 GET, POST, PUT, DELETE 메서드를 허용하고, 모든 헤더를 허용하며, 자격 증명을 포함한 요청을 허용합니다.
CORS 설정을 올바르게 이해하고 구성하면, 다양한 출처 간에 안전하게 리소스를 공유할 수 있습니다. CORS는 웹 애플리케이션 개발에서 중요한 보안 메커니즘 중 하나입니다.
728x90
반응형
'Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] Kotlin & React 연동하기 (0) | 2024.06.16 |
---|---|
[ Spring Boot Kotiln ] Redis 사용하기 (0) | 2024.02.25 |
[ JPA ] batch_fetch_size (0) | 2024.02.21 |
[Spring Boot] Kotlin Ktlint 적용하기 (2) | 2024.01.21 |
[ Spring Cloud ] Spring Cloud Netflix Eureka - 2편 (0) | 2021.07.15 |