🔎 CORS 감지 절차

정의

CORS 문제는 브라우저 콘솔, Network 탭, Preflight 요청, 서버 응답 헤더 순서로 확인하면 원인을 빠르게 좁힐 수 있다.

브라우저에서만 막히는지, 서버 설정이 부족한지, 프록시나 보안 설정이 개입했는지를 단계적으로 확인하는 문서다.

🧭 먼저 볼 것

  • 브라우저 Console
  • Network 탭
  • Preflight OPTIONS 요청
  • 서버 응답 헤더
  • curl 재현 요청

🧪 브라우저 콘솔 확인

  • 콘솔 에러 메시지를 먼저 확인한다.
  • Access-Control-Allow-Origin 관련 메시지가 있으면 CORS 가능성이 높다.
  • blocked by CORS policy 문구가 보이면 우선 CORS 설정을 의심한다.

🌐 Network 탭 확인

  • 실제 요청과 OPTIONS 요청의 상태 코드를 확인한다.
  • Origin, Response Headers, Redirect 여부를 함께 본다.
  • 실제 요청 전에 Preflight가 발생했는지 확인한다.
  • 응답 헤더에 Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Allow-Credentials가 있는지 확인한다.

🛠️ Preflight 실패 분류

  • 401/403으로 실패하는 경우
  • 200이지만 실제 요청이 차단되는 경우
  • 301/302 리다이렉트 때문에 실패하는 경우
  • OPTIONS 요청이 Spring Security나 프록시에서 막히는지 확인한다.

🧰 curl로 재현

curl -i "https://api.example.com/v1/health" -H "Origin: https://web.example.com"
curl -i -X OPTIONS "https://api.example.com/v1/resource" -H "Origin: https://web.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: authorization,content-type"

브라우저 없이 서버가 어떤 헤더를 내려주는지 직접 확인할 때 유용하다.

⚠️ 운영 체크리스트

  • 프런트와 API 도메인이 다른지 확인
  • Nginx/ALB/Gateway에서 헤더를 변경하는지 확인
  • Spring Security가 OPTIONS를 막는지 확인
  • credentials 사용 여부와 Allow-Origin 설정을 함께 확인
  • 허용 Origin을 너무 넓게 열지 않았는지 확인

📌 정리

  • 콘솔에서 1차 오류를 확인한다.
  • Network 탭에서 실제 요청과 Preflight를 확인한다.
  • curl로 서버 응답을 재검증한다.
  • 최종적으로 프록시, 보안 설정, Spring CORS 설정 순서로 좁혀간다.

연결문서

댓글남기기