피드로 돌아가기
MCP Server CORS: The Preflight Problem That Broke My MCP Server 92 Times And How I Fixed It For Good
Dev.toDev.to
Backend

Filter Order 조정을 통한 MCP 서버 CORS Preflight 403 에러 완전 해결

MCP Server CORS: The Preflight Problem That Broke My MCP Server 92 Times And How I Fixed It For Good

KevinTen2026년 6월 25일9intermediate

Context

Spring Boot 기반 MCP 서버 배포 후 HTTPS 환경에서 간헐적인 CORS Preflight 요청 실패 발생. AuthenticationFilter가 CorsFilter보다 먼저 실행되어 API Key가 없는 OPTIONS 요청을 403으로 거부하는 아키텍처적 결함 확인.

Technical Solution

  • @Order(Ordered.HIGHEST_PRECEDENCE) 설정을 통한 CorsFilter의 실행 우선순위 최상단 배치
  • AuthenticationFilter의 실행 순서를 HIGHEST_PRECEDENCE + 1로 조정하여 CORS 헤더 선행 부여 구조 설계
  • HttpMethod.OPTIONS 요청에 대해 인증 로직을 완전히 스킵하는 예외 처리 로직 구현
  • setAllowedOriginPatterns("*") 및 필수 MCP Method(GET, POST, OPTIONS) 허용 설정 적용
  • X-Accel-Buffering 등 SSE 통신을 위한 필수 Exposed Headers 설정 추가
  • Preflight 결과 캐싱을 위해 setMaxAge(3600L)를 적용하여 불필요한 네트워크 왕복 감소

1. CORS 설정 필터가 인증 필터보다 먼저 실행되는지 @Order 순서 확인

2. 인증 필터 내부에서 OPTIONS 메서드 요청을 조건문으로 제외 처리했는지 검토

3. Localhost 환경의 CORS 관대함에 의존하지 않고 Production과 동일한 HTTPS/CORS 제약 환경에서 검증

4. SSE 등 특수 통신 사용 시 필요한 Exposed Headers가 명시적으로 설정되었는지 확인

원문 읽기