1. CORS (Cross-Origin Resource Sharing)
- 웹 애플리케이션이 다른 도메인에서 리소스에 접근할 수 있도록 하는 메커니즘
- 브라우저의 보안 정책으로 인해, 웹 페이지는 동일 출처 정책(Same-Origin Policy)에 따라 다른 도메인에서의 리소스 요청을 제한
- 이러한 제한을 우회, 웹 애플리케이션이 다른 출처의 리소스에 접근할 수 있게 해 줌
CORS의 주요 개념
- 출처 (Origin)
- 프로토콜(
http
또는https
), 도메인, 포트 번호를 포함
EX)
http://example.com:8080
과 https://example.com
은 서로 다른 출처- 동일 출처 정책 (Same-Origin Policy)
- 브라우저는 보안을 위해 기본적으로 다른 출처의 자원에 접근을 차단
- 웹 페이지가 요청을 보내는 출처와 응답을 보내는 출처가 동일해야 함
- CORS 요청
- 브라우저가 다른 출처의 서버에 요청을 보낼 때 자동으로 발생
- 서버는 이 요청을 처리, 브라우저는 응답을 받아서 리소스를 로드할 수 있음
CORS 요청의 두 가지 유형
- 단순 요청 (Simple Requests)
GET
,POST
,HEAD
메서드만 사용- 특정 헤더(
Accept
,Accept-Language
,Content-Language
,Content-Type
등)만 포함 - 이러한 요청은 별도의 CORS 사전 요청이 필요 없음
- 사전 요청 (Preflight Requests):
PUT
,DELETE
,PATCH
와 같은 메서드나 사용자 정의 헤더가 포함된 요청은 사전 요청(preflight request)이 필요- 이 사전 요청은
OPTIONS
메서드를 사용하여 서버가 실제 요청을 허용하는지 확인
CORS 헤더
- 적절한 HTTP 헤더를 응답에 추가하여, 브라우저에게 요청을 허용할지 여부를 알려줌
Access-Control-Allow-Origin
: 요청을 허용할 출처를 지정Access-Control-Allow-Methods
: 허용할 HTTP 메서드를 지정Access-Control-Allow-Headers
: 요청에서 허용할 헤더를 지정Access-Control-Allow-Credentials
: 자격 증명(쿠키, 인증 헤더 등)의 전송을 허용할지 여부를 지정Access-Control-Expose-Headers
: 클라이언트가 접근할 수 있는 응답 헤더를 지정
package com.example.simpe_restapi._core; 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://localhost:8080") // 허용할 도메인 .allowedMethods("GET", "POST", "PUT", "DELETE") .allowedHeaders("*"); } }
- addCorsMappings(CorsRegistry registry) : CORS 설정을 추가
- registry.addMapping("/**") : 모든 경로(
/**
)에 대해 적용
- .allowedOrigins("http://localhost:8080") : 허용할 원본 도메인을 설정
다른 도메인에서 오는 요청은 차단
- .allowedMethods("GET", "POST", "PUT", "DELETE") : 허용할 HTTP 메서드를 설정
- .allowedHeaders("*") : 허용할 HTTP 헤더를 설정
모든 헤더 허용
Share article