팀프로젝트를 진행할 때 백엔드와 데이터를 주고받을 때 선택할 수 있는 방법은 크게 2가지가 있다.
최근 팀프로젝트를 진행하는데 1번과 같은 방식으로 진행했다.
근데 문제가 발생했다. 뭐만하면 자꾸 CORS 에러가 발생하는 것이다...그래서 CORS에 대해 조사해봤다.
출처 : GPT
아...보안을 위해 허용되지 않은 출처에서 데이터를 요청하면 차단하는 건가보다..
사실 Spring boot를 공부할 때 Origin을 설정해본적이 있긴하다..(Origin(*)로 다 열어줬는데 그러면 CORS가 의미가 없잖아? 권한은 최소한으로 열어놓자.)
1. 출처가 다른 도메인 또는 포트로 리소스를 요청할 때
CORS 정책에 따라, 출처가 다른 도메인이나 포트에서 리소스를 요청하는 경우에는 브라우저에서 CORS 에러가 발생한다. 이 경우에는 서버 측에서 Access-Control-Allow-Origin 헤더를 설정하여 요청을 허용해야 한다.
2. HTTPS에서 HTTP로 리소스를 요청할 때
보안상의 이유로 HTTPS에서 HTTP로 리소스를 요청하는 경우에도 CORS 에러가 발생할 수 있다. 이 경우에는 HTTPS로 통신하는 서버에서 HTTP로 요청을 전달하는 것이 아니라, HTTPS로 전달해야 한다.
3. 인증 정보를 포함한 요청을 보낼 때
CORS 정책에 따라, 인증 정보를 포함한 요청을 보낼 때에는 서버에서 Access-Control-Allow-Credentials 헤더를 설정해야 한다. 이 헤더가 설정되어 있지 않으면 브라우저는 인증 정보가 포함된 요청을 거부한다.
4. 허용되지 않은 메서드를 사용할 때
CORS 정책에 따라, 허용되지 않은 메서드를 사용하는 요청을 보내는 경우에는 CORS 에러가 발생한다. 이 경우에는 서버에서 Access-Control-Allow-Methods 헤더를 설정하여 요청을 허용해야 한다.
5. 허용되지 않은 헤더를 사용할 때
CORS 정책에 따라, 허용되지 않은 헤더를 사용하는 요청을 보내는 경우에도 CORS 에러가 발생한다. 이 경우에는 서버에서 Access-Control-Allow-Headers 헤더를 설정하여 요청을 허용해야 한다.
6. 프리플라이트 요청에 대한 응답이 없는 경우
브라우저는 CORS 정책을 준수하기 위해, 프리플라이트 요청을 보내고 서버에서 이에 대한 응답을 받아야 한다. 이 때, 서버에서 응답이 없는 경우에는 CORS 에러가 발생한다. 이 경우에는 서버에서 프리플라이트 요청에 대한 응답을 보내도록 설정해야 한다.
7. 브라우저가 CORS를 지원하지 않는 경우
일부 오래된 브라우저에서는 CORS를 지원하지 않는 경우가 있다. 이 경우에는 서버 측에서 다른 방법을 사용하여 요청을 처리해야 한다.
8. CDN 등에서 제공하는 리소스를 요청할 때
일부 CDN 등에서 제공하는 리소스를 요청할 때에도 CORS 에러가 발생할 수 있다. 이 경우에는 CDN 서비스 제공 업체에서 CORS 설정을 제공하고 있으므로 해당 설정을 확인해야 한다.
9. 브라우저 설정 문제
일부 브라우저에서는 CORS 에러가 발생하는 경우가 있는데, 이는 브라우저 설정에서 발생하는 문제일 수 있다. 이 경우에는 브라우저 설정을 확인하거나, 다른 브라우저를 사용하여 문제를 해결할 수 있다.
출처 : https://www.jeong-min.com/30-cors-fe/
경험상 1번이 가장 많은거 같다.
내가 테스팅하려는 주소를 서버 개발자에게 Origin을 열어달라고 해보자.
어...이렇게 말하면 서버 개발자에게 부탁하는 것말고 방법이 없어보인다.
그럼 프론트 개발자가 혼자 시도해볼 수 있는 방법은?
CORS의 동작 방법과 같은 것보다 실제 개발하면서 마주한 CORS문제를 어떻게 해결했는지 초급 개발자 입장에서 정리해봤다.
CORS에 대한 더 자세한 내용은 추가로 학습하려 한다.
이 글은 당장 빨리 CORS 에러를 해결해야하는 초급 프론트엔드 개발자에게 도움이 되기를 바란다..