1. 정의
- Preflight(프리플라이트) 요청은
브라우저가 “실제 요청 전에” 서버에 OPTIONS 메서드로 사전 질의하는 과정입니다. - 목적은:
“내가 앞으로 이 API에 특수 헤더/메서드/쿠키 등을 붙여서 요청해도
서버가 허락해주는지 먼저 확인하겠다”는 것.
2. 언제 Preflight가 발생하는가?
- 브라우저가 CORS 규칙 위반 요청을 하려 할 때
(예: 커스텀 헤더, 인증 필요, JSON POST 등) - 예시:
- Authorization, X-CUSTOM-TOKEN 같은 커스텀 헤더 포함
- Content-Type이 application/json 등 표준이 아닐 때
- 메서드가 GET/POST/HEAD가 아닌 경우 (PUT, PATCH, DELETE 등)
3. Preflight의 실제 동작 순서
- 브라우저가 서버로 OPTIONS 요청 전송
- 헤더:
-
pgsql복사편집Origin: http://localhost:63342 Access-Control-Request-Method: POST Access-Control-Request-Headers: authorization,content-type,x-plannext-token
- 서버가 CORS 허용 응답을 내려줘야 함
- 필수 응답 헤더:
-
mathematica복사편집Access-Control-Allow-Origin: http://localhost:63342 Access-Control-Allow-Methods: POST, GET, OPTIONS, ... Access-Control-Allow-Headers: authorization, content-type, x-plannext-token
- 200 OK로 응답
- 브라우저가 “이제 진짜(POST 등) 요청을 보낼 수 있겠군!” 하고
실제 API 호출을 보냄
4. Spring/Security에서 주의할 점
- OPTIONS(Preflight)는 인증/토큰/비즈니스 검증/로깅 절대 하지 말고, 바로 통과시켜야 함
- CORS 필터가 OPTIONS 요청에 대해 위 헤더와 200 OK만 리턴해야 브라우저가 통과 허락
- Preflight가 실패하면 실제 요청 자체가 서버에 도달하지 않음
5. 실전 실수 패턴
- OPTIONS 요청을 인증, 토큰 필터에서 검증해버림 → 무조건 CORS 실패
- Security에서 OPTIONS를 permitAll 안 함 → 무조건 CORS 실패
- CorsWebFilter 설정이 빠짐 → 브라우저에 CORS 헤더 없음
6. 네트워크 분석 꿀팁
- F12 → Network → OPTIONS 요청 →
응답 헤더에 Access-Control-Allow-*가 있는지 항상 확인! - 이게 없으면 실제 POST가 절대 서버에 안 옴
7. 결론
- Preflight는 “실제 요청 전, 브라우저가 서버에 물어보는 사전 질의(OPTIONS)”
- 서버는 200 OK와 올바른 CORS 허용 헤더만 주면 OK!
- 실제 인증/토큰/로깅 등은 진짜 API(POST 등) 요청에만 적용
반응형
'백엔드 > 알면 도움이 되는 것들' 카테고리의 다른 글
구글 유튜브 API (YouTube Data API) 활용 (0) | 2025.03.18 |
---|---|
JetBrains IDE에서 GitHub Copilot 사용하기 (0) | 2025.03.17 |
M1 MacOS Ruby & Rails 셋팅 (ruby build failed error, rbenv) (0) | 2024.08.16 |
Intelij querydsl - cannot find symbol q class 해결 기록일지 (0) | 2022.11.14 |
GitHub commit & push 403 error 해결 (0) | 2022.11.11 |