CORS
Corss-Origin Resource Sharing의 약자로 서로 다른 도메인 간 리소스 공유를 제어하는 메커니즘이다. 브라우저는 동일 출처 정책에 의해 다른 호스트로에 리소스 요청을 차단한다.
cross origin의 예시
기준 URL | http://kyoulho.com |
프로토콜이 다른 경우 | https://kyoulho.com |
포트가 다른 경우 | http://kyoulho.com:8080 |
도메인이 다른 경우 | http://ulho.com |
하위 도메인 | http://sub.kyoulho.com |
maxAge 설정
maxAge를 설정하면 동일한 도메인에서 동일한 리소스에 대한 CORS 요청 시 매번 사전 검사 요청을 보내지 않고 캐시 된 결과를 사용할 수 있다.
maxAge 값만큼 시간이 지나면 캐시가 만료되고 다음 요청부터는 다시 사전 검사 요청을 수행해야 한다.
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@CrossOrigin(origins="http://localhost:8080", maxAge=3600)
@GetMapping("/")
public String hello() {
return "Hello World";
}
}
Preflight
Preflight는 사전 요청으로 서버에 CORS 정책을 확인하는 요청이다. 이때 OPTIONS 메소드를 사용하기도 하지만, HEAD 메서드를 사용하는 경우도 있다.
요청 헤더
- Access-Control-Request-Method: 실제 요청에서 사용할 HTTP 메소드
- Access-Control-Request-Headers: 실제 요청에서 사용할 HTTP 헤더
응답 헤더
- Access-Control-Allow-Origin: 서버가 허용하는 리소스 접근 도메인을 지정.
- Access-Control-Allow-Methods: 서버가 허용하는 HTTP 메서드를 지정.
- Access-Control-Allow-Headers: 서버가 허용하는 HTTP 헤더를 지정.
- Access-Control-Max-Age: 사전 검사 요청 결과 캐싱 시간을 지정.
이러한 요청과 응답 헤더들을 통해 브라우저가 결과를 성공적으로 확인하고 나면 그 이후 과정을 진행한다.
OPTION 메소드, HEAD 메소드
OPTION 메소드
- OPTION 메서드는 특정 리소스에 대해 허용되는 HTTP 메소드, 헤더, 기타 옵션을 확인하는 데 사용된다.
- CORS 사전 검사 요청에서 사용되며, 서버가 허용하는 정보를 클라이언트에 알려준다.
- OPTIONS 요청은 리소스 본문을 포함하지 않으며, 응답에는 허용되는 메소드, 헤더, CORS 관련 정보 등이 포함된다.
HEAD 메소드
- HEAD 메소드는 리소스 본문을 포함하지 않고 리소스 메타데이터만 요청하는 데 사용된다.
- 리소스 존재 여부 확인, 리소스 변경 확인, 리소스 옵션 확인 등에 활용된다.
728x90
'JVM > SpringMVC' 카테고리의 다른 글
[SpringMVC] 스프링 이벤트 시스템 (0) | 2024.08.10 |
---|---|
빈 스코프: 빈의 생명 주기와 활용 (0) | 2024.03.09 |
요청 처리와 스레드풀 (0) | 2023.12.20 |
Spring WebSocket & STOMP (0) | 2023.12.15 |