JVM/SpringMVC

CORS와 Preflight Request

kyoulho 2024. 3. 9. 10:57

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 메소드는 리소스 본문을 포함하지 않고 리소스 메타데이터만 요청하는 데 사용된다.
  • 리소스 존재 여부 확인, 리소스 변경 확인, 리소스 옵션 확인 등에 활용된다.

 

 

'JVM > SpringMVC' 카테고리의 다른 글

스프링 이벤트 시스템  (0) 2024.08.10
빈 스코프: 빈의 생명 주기와 활용  (0) 2024.03.09
요청 처리와 스레드풀  (0) 2023.12.20
Spring WebSocket & STOMP  (0) 2023.12.15