Preflight 요청은 OPTIONS 요청으로, 다음과 같은 헤더를 포함한다.
서버는 다음과 같은 헤더에 값을 보내어 요청에 대해서 허용할지 결정한다.
이와 같은 과정을 통해 실제 원본 요청이 아닌 Preflight 요청으로 CORS를 검증하여 불필요한 리소스 낭비를 줄일 수 있다.
사이드 프로젝트에서 Spring Boot Interceptor를 이용해 인증 관련 부분을 구현하고 배포했다. 배포 이후에 프론트에서 요청이 제대로 처리되지 않았고 확인을 해보니 OPTIONS 요청에 401 Unauthorized 에러가 발생하는 것이었다.
문제 원인을 파악한 결과 CORS 검증을 위해 Preflight 요청으로 OPTIONS 요청을 보내고 있는 것을 확인했고 Interceptor에서는 해당 요청에 대해 토큰 검증을 진행하면서 401 에러를 발생시키고 있는 것이었다.
문제 원인 파악 후 Preflight 요청에 대해서 토큰 검증을 생략하게 하여 해결할 수 있었다.
public class AuthenticationInterceptor {
private static final String PREFLIGHT_METHOD = "OPTIONS";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (PREFLIGHT_METHOD.equalsIgnoreCase(request.getMethod())) {
} return true;
}
}
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#the_http_response_headers