기본 콘텐츠로 건너뛰기

라벨이 Preflight OPTIONS 문제인 게시물 표시

API CORS 경고 없이 401/403이 반환되는 원인과 단계별 디버깅 가이드

API CORS 경고 없이 401/403이 반환되는 원인과 단계별 디버깅 가이드 AI 생성 이미지: API CORS 경고 없이 401/403 반환 원인과 디버깅 문제 정의 — 브라우저에는 CORS 경고가 없는데 401/403이 뜨는 상황 브라우저 개발자도구 네트워크 탭에 CORS 관련 오류(예: “Access-Control-Allow-Origin” 없음)가 보이지 않는데도 응답 상태가 401 또는 403으로 돌아올 수 있다. 이런 경우 브라우저가 응답을 차단하지는 않지만, 서버가 인증·권한 문제로 요청을 거부한 것이다. 아래 내용은 API CORS 경고 없이 401/403 반환 원인과 디버깅 관점에서 자주 마주치는 사례를 정리한 것이다. 클라이언트 관찰: 네트워크 탭에는 OPTIONS 프리플라이트가 통과했거나 CORS 헤더가 포함된 정상적인 요청/응답 흐름이 보이지만, 최종 응답이 401 또는 403으로 표시된다. fetch는 rejected되지 않고 응답 객체를 반환하므로(res.ok === false) 네트워크 실패와 혼동하면 안 된다. 서버 관찰: 흔한 원인으로는 토큰 만료·누락, Authorization 헤더 미전송, 세션 쿠키 미전달, 또는 CSRF 검증 실패 등이 있다. 추가로 미들웨어 순서 문제로 CORS 헤더는 응답에 붙지만 인증 로직이 먼저 실패해 요청을 거부하는 경우도 자주 발생한다. 재현 예시: curl -i -H "Authorization: Bearer x" vs curl without header → 무토큰 시 401. 브라우저에서는 fetch('/api', {credentials:'omit'})처럼 호출하면 쿠키 기반 인증이 전달되지 않아 401이 반환될 수 있다. 실무 체크리스트 — 서버 로그에서 인증 실패 사유 확인, 요청 헤더(Authorization)와 쿠키 전달 여부 점검, 프리플라이트 응답과 CORS 헤더·미들웨어 순서 검토, 토큰 만료/리프레시 정...